¿Qué significa el término "porcelana" en Git?

435

El término "porcelana" aparece ocasionalmente en la documentación de Git. Qué significa eso?

Jan Hettich
fuente

Respuestas:

516

La "porcelana" es el material con el que generalmente se fabrican los inodoros (y, a veces, otros accesorios como los lavabos). Esto es distinto de "plomería" (las tuberías y desagües reales), donde la porcelana proporciona una interfaz más fácil de usar para la plomería.

Git usa esta terminología en analogía, para separar los comandos de bajo nivel que los usuarios generalmente no necesitan usar directamente (la "plomería") de los comandos de alto nivel más fáciles de usar (la "porcelana").

Greg Hewgill
fuente
45
Creo que la respuesta tiene sentido para mí, pero, de nuevo, supongo que Linus fue quien acuñó el término, por lo que tiendo a ajustar mi cerebro para ser un poco más directo y grosero al analizar su mundo. :)
Nick Klauer
58
Hace que te preguntes si Linus estaba imaginando las posibles corrientes de excremento que su tubería sería utilizada para transportar. La plomería para el código fuente abierto es un trabajo sucio, pero alguien tiene que hacerlo.
Evan Plaice
36
Y algunos de nosotros sentimos que la porcelana git real es más como una capa de pintura sobre la tubería.
Hemflit
14
otra respuesta a continuación es más verdadera y más útil
Charney Kaye
14
¿Alguien más encuentra esto cómico?
Ben Wilde
447

Más importante aún, el término "porcelana" se aplica a los comandos de alto nivel , con salida:

  • destinado a ser legible por humanos
  • no debe ser analizado
  • susceptible a cambios / evoluciones

Esa es la clave: si escribe, debe usar, si es posible , comandos de plomería , con salidas estables. No comandos de porcelana.

Sin embargo, puede usar la salida de un comando de porcelana que tiene una --porcelainopción en el script (ver a continuación), como:

git status --porcelain
git push --porcelain
git blame --porcelain

Aunque git incluye su propia capa de porcelana , sus comandos de bajo nivel son suficientes para apoyar el desarrollo de porcelanas alternativas.
La interfaz (entrada, salida, conjunto de opciones y la semántica) de estos comandos de bajo nivel está destinada a ser mucho más estable que los comandos de nivel de porcelana, ya que estos comandos son principalmente para uso con script .
La interfaz con los comandos de Porcelain, por otro lado, está sujeta a cambios para mejorar la experiencia del usuario final.

Consulte " ¿Cómo determino programáticamente si hay cambios no confirmados? " Como ejemplo para usar comandos de plomería en lugar de los de porcelana.


Nota: Un comando de porcelana puede tener una --porcelainopción.
Por ejemplo:, git status --porcelainque designa una salida destinada a ser analizada .

--porcelain

Proporcione la salida en un formato fácil de analizar para los scripts. Esto es similar a la salida corta, pero se mantendrá estable en las versiones de git e independientemente de la configuración del usuario. Ver abajo para más detalles.

El hilo mencionado anteriormente detalla:

Esto es mi culpa, hasta cierto punto.
La forma de "estado corto" está destinada a los globos oculares humanos y fue diseñada por Junio.
Algunas personas también querían una salida de estado programable, por lo que coloqué un " --porcelain" en el mismo formato que desactiva las funciones configurables, como nombres de ruta relativos y coloración, y hace una promesa implícita de que no haremos más cambios en el formato.
La idea era evitar que las personas hicieran scripts --short, porque nunca se pretendió que fuera estable.
Así que sí, aunque --porcelainpor sí solo es estable y programable, quizás no sea el más amigable para los analizadores. El " -z --porcelain" formato es mucho más, y se lo recomendaría a cualquiera que escriba "git status"

¡Eso refleja la necesidad, para los usuarios de git, de usar comandos de porcelana en sus scripts!
Pero solo con salida estable (con --porcelain)


Como se ha comentado por William-berg , lo mismo pasa git push!

--porcelain

Produzca salida legible por máquina.
La línea de estado de salida para cada referencia se separará por tabulaciones y se enviará a en stdoutlugar de stderr.
Se darán los nombres simbólicos completos de las referencias.


Como John Glassmyer propone en los comentarios :

Quizás el significado de --porcelainaquí es "producir productos aptos para el consumo de guiones de porcelana" .

Y eso podría estar respaldado por el primer caso de --porcelainintroducción de " opción"
(antes git status --porcelain, commit 6f15787, septiembre de 2009, git 1.7.0 ,
antes git push --porcelain, commit 1965ff7, junio de 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Mostrar en un formato diseñado para el consumo de la máquina.

Commit b5c698d, octubre de 2006, git 1.4.4

La nueva opción hace que el formato de salida nativo del comando emita una salida que es más fácil de manejar con Porcelain .

VonC
fuente
2
Noto que git pushtiene una lectura mecánica anómala similar --porcelain.
william.berg
13
Quizás el significado de --porcelainaquí es "producir productos aptos para el consumo de guiones de porcelana".
John Glassmyer
@JohnGlassmyer es una explicación muy probable. Vea mi respuesta editada (al final)
VonC
1
Tambiéngit diff-tree --word-diff=porcelain
Nicholas Shanks
1
@PatrickSanan en cierto sentido, sí. Su salida se puede analizar de manera confiable con esa opción.
VonC
57

La acuñación y el uso del término "porcelana" en git fue en realidad de Mike Taht, mientras que, de lo contrario, perdió una acalorada discusión con Linus Torvalds.

http://www.gelato.unsw.edu.au/archives/git/0504/0881.html

De hecho, una de mis esperanzas era que otros SCM pudieran usar la fontanería git.
Pero realmente sugeriría que uses "git" en sí, no ninguno " libgit". Es decir, que tome todas las tuberías como los programas reales, y en lugar de tratar de enlace contra las rutinas individuales, que había script de ella.

Si no lo quieres, no lo haré.
Sin embargo, todavía tiene sentido separar la tubería de la porcelana .

dave taht
fuente
77
Interesante. +1. Mi propia respuesta anterior es de usar el producto, pero su enlace hace referencia a lo que parece ser el origen de ese término.
VonC
21

Porcelana es un nombre lindo para programas y suites de programas que dependen de core git, que presenta un acceso de alto nivel a core git. Las porcelanas exponen más de una interfaz SCM que la "fontanería".

- Porcelana , Git Wiki

Johnsyweb
fuente
7

Los comandos de porcelana están diseñados para el consumo humano, a diferencia de los comandos cuya salida es fácil de analizar para las computadoras. git statusSería un ejemplo.

dahlbyk
fuente
8
"Porcelana" ... "para consumo humano" ... Puedo comer vidrio . (es broma / señalando metáfora mixta para cualquier persona que puede confundirse fácilmente)
ajm475du
55
Los comandos de porcelana son para consumo humano, pero cuando usa la --porcelainopción, es para consumo de máquina.
ThomasW
git status --porcelain: Proporcione la salida en un formato fácil de analizar para los scripts. (...) pero se mantendrá estable en todas las versiones de Git e independientemente de la configuración del usuario.
tymtam
Gracias por el voto negativo. 🙄 Sí, git status --porcelaintiene un formato estable que se puede analizar, pero el statuscomando en sí está diseñado para ser dirigido al usuario (en lugar de, por ejemplo git ls-files).
dahlbyk
7

La explicación breve y simple

  • Hay dos tipos de comandos: "poreclain" y "plomería".
  • No se debe confiar en los comandos de " Porcelana " al programar / programar: porque es probable que cambien, y están destinados a humanos, no a máquinas.
  • Los comandos de " fontanería " se deben usar para crear secuencias de comandos, ya que son más estables y tienen menos probabilidades de cambiar.

¿Pero qué pasa con la --porcelainopción confusa ?

  • Si desea: (i) usar un comando de porcelana Y (ii) desea asegurarse de que la salida se pueda analizar de manera confiable (recuerde, los comandos de porcelana están destinados solo a humanos y no a análisis), entonces puede agregar la --porcelainopción y luego use la salida para la secuencia de comandos. Básicamente, los autores de git están implícitamente prometiendo no cambiar nada allí, en el corto plazo. ejemplo: puedo usar git status --porcelainy usar la salida para las secuencias de comandos y eso estaría perfectamente bien.

¿De dónde viene la terminología de porcelana / plomería?

BKSpurgeon
fuente
1
¿Qué pasa con la confusa opción de porcelana?
Abordo
¡convenido! Había agregado un enlace a su respuesta anterior:For more detail, checkout VonC's answer.
BKSpurgeon
OK, al menos usar una opción nombrada --porcelainen comandos ya "porcelana" para lograr la funcionalidad de "pseudo-plomería" combina muy bien con el diseño general de la interfaz de usuario de Git ...;)
Sz.
1
No entiendo por qué esta opción se llama "porcelana". Todo el comando ya es "porcelana". Debe llamarse a la opción --plumbing(ya que esta vez es un plomero, no un usuario habitual de "porcelana").
seeker_of_bacon
3

La respuesta de Greg Hewgill es exactamente correcta. Tenga en cuenta que hay porcelanas alternativas disponibles para Git, que incluyen Easy Git, yap, pyrite y vng. Cada uno está destinado a hacer que Git sea más fácil de aprender / usar para alguna parte de la comunidad. Los enlaces a todos estos proyectos se encuentran en la página Easy Git: http://people.gnome.org/~newren/eg/ .

Pablo Halpern
fuente
1

Hay dos significados distintos de porcelana en git.

Estos dos significados, si bien se puede argumentar que no son estrictamente contradictorios, pueden parecer contradictorios.

A. Conceptual (fontanería vs porcelana)

El libro oficial de Pro Git :

Pero debido a que Git era inicialmente un kit de herramientas para un sistema de control de versiones en lugar de un VCS completo y fácil de usar, tiene una serie de subcomandos que realizan un trabajo de bajo nivel y fueron diseñados para ser encadenados al estilo UNIX o llamados desde scripts. Estos comandos generalmente se conocen como comandos de "plomería" de Git, mientras que los comandos más fáciles de usar se llaman comandos de "porcelana".

B. --porcelain/ =porcelainopciones

Muchos comandos de git vienen con una --porcelainopción que está destinada a secuencias de comandos.

git status' documentación :

--porcelain[=<version>]

Proporcione la salida en un formato fácil de analizar para los scripts. Esto es similar a la salida corta, pero se mantendrá estable en todas las versiones de Git e independientemente de la configuración del usuario. Ver abajo para más detalles.

git diff's documentación :

--word-diff[=<mode>]

porcelana

      Utilice un formato especial basado en líneas destinado al consumo de script.

tymtam
fuente