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

Resuelto Jan Hettich asked hace 13 años • 9 respuestas

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

Jan Hettich avatar Aug 08 '11 06:08 Jan Hettich
Aceptado

La "porcelana" es el material con el que normalmente se fabrican los inodoros (y a veces otros elementos fijos como los lavabos). Esto es distinto de la "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 normalmente no necesitan usar directamente (la "plomería") de los comandos de alto nivel más fáciles de usar (la "porcelana").

Greg Hewgill avatar Aug 07 '2011 23:08 Greg Hewgill

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

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

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

Sin embargo, puedes usar la salida de un comando de porcelana que tiene una --porcelainopción en script (ver más abajo), 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 respaldar el desarrollo de porcelanas alternativas.
La interfaz (entrada, salida, conjunto de opciones y semántica) de estos comandos de bajo nivel está destinada a ser mucho más estable que los comandos de nivel Porcelain, porque estos comandos son principalmente para uso mediante scripts .
Por otro lado, la interfaz de los comandos de Porcelain está sujeta a cambios para mejorar la experiencia del usuario final.

Consulte "¿ Cómo puedo determinar mediante programación si hay cambios no confirmados? " como ejemplo del uso de comandos de plomería en lugar de comandos de porcelana.


Nota: Un mando de porcelana puede tener una --porcelainopción.
Por ejemplo: git status --porcelain, que designa una salida que debe analizarse .

--porcelain

Proporcione el resultado en un formato fácil de analizar para scripts. Esto es similar al resultado breve, pero permanecerá estable en todas las versiones de git e independientemente de la configuración del usuario. Consulte a continuación para obtener más detalles.

El hilo mencionado anteriormente detalla:

Esto es culpa mía, 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 puse un " --porcelain" en el mismo formato que desactiva funciones configurables como nombres de rutas relativas y coloración, y hace una promesa implícita de que no haremos más cambios en el formato.
La idea era evitar que la gente creara secuencias de comandos --short, porque nunca se pretendió que fuera estable.
Entonces, sí, si bien --porcelainpor sí solo es estable y programable, quizás no sea el más amigable para los analizadores. El -z --porcelainformato " " lo es mucho más y lo recomendaría a cualquiera que escriba scripts en torno al "estado de git".

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


Como comentó william -berg , ¡lo mismo ocurre con git push!

--porcelain

Produzca resultados legibles por máquina.
La línea de estado de salida para cada referencia estará separada por tabulaciones y se enviará a stdouten lugar de stderr.
Se darán los nombres simbólicos completos de los árbitros.


Como propone John Glassmyer en los comentarios :

Quizás el significado --porcelainaquí sea "producir productos aptos para el consumo con escrituras de porcelana" .

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

git blame --porcelain:

-p
--porcelain

Espectáculo en un formato diseñado para el consumo de máquinas.

Confirmación b5c698d, octubre de 2006, git 1.4.4

La nueva opción hace que el formato de salida nativo del comando emita resultados que sean más fáciles de manejar para Porcelain .

VonC avatar Aug 08 '2011 06:08 VonC

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

https://web.archive.org/web/20190427113112/http://www.gelato.unsw.edu.au/archives/git/0504/0881.html

De hecho, una de mis esperanzas era que otros SCM pudieran usar la plomería de git.
Pero entonces realmente te sugiero que uses "git" en sí, no cualquier " libgit". Es decir, tomas todas las tuberías como programas reales y, en lugar de intentar vincularlas con rutinas individuales, las escribes en un script .

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

dave taht avatar Dec 07 '2013 23:12 dave taht

Explicación sencilla

  • Comandos " Porcelana ": NO para secuencias de comandos porque: es probable que cambien; destinado a humanos, no a máquinas. Para ayudarte a recordar, piensa en un grifo (o grifo) de porcelana de tu baño: puedes sustituirlo fácilmente por un color diferente. porcelain == easy_to_change.
  • Los comandos " plomería " se pueden utilizar para secuencias de comandos porque: son más estables/es menos probable que cambien). Plomería se refiere a las tuberías de su baño: ¡las tuberías son permanentes y no pueden cambiarse muy fácilmente!

Sí, pero ¿qué pasa con la --porcelainopción confusa?

Si quieres:

  1. use un comando de porcelana (destinado a humanos, no a análisis) Y
  2. analizarlo de manera confiable

....luego puede agregar la --porcelainopción y usar la salida para secuencias de comandos.

Ejemplo: puedo usar git status --porcelainy usar la salida para secuencias de comandos, no hay problema.

(Es fácil criticar, especialmente si no se especifica ninguna alternativa, con el mayor respeto a los creadores de git).

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

  • Si el inglés no es su primer idioma, Greg Hewgill lo explica perfectamente.
  • Para obtener más detalles: consulte la respuesta de VonC .
BenKoshy avatar Aug 28 '2019 22:08 BenKoshy

Porcelain es un lindo nombre para programas y conjuntos de programas que dependen del núcleo de git, y presenta un acceso de alto nivel al núcleo de git. Las porcelanas exponen más una interfaz SCM que las "plomerías".

- Porcelana , Git Wiki

johnsyweb avatar Aug 07 '2011 23:08 johnsyweb