¿Qué significa el término "porcelana" en Git?
El término "porcelana" aparece ocasionalmente en la documentación de Git. ¿Qué significa?
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").
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 --porcelain
opció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 --porcelain
opció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--porcelain
por sí solo es estable y programable, quizás no sea el más amigable para los analizadores. El-z --porcelain
formato " " 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á astdout
en lugar destderr
.
Se darán los nombres simbólicos completos de los árbitros.
Como propone John Glassmyer en los comentarios :
Quizás el significado
--porcelain
aquí sea "producir productos aptos para el consumo con escrituras de porcelana" .
Y eso podría ser respaldado por el primer caso de --porcelain
introducció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 .
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 .
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 --porcelain
opción confusa?
Si quieres:
- use un comando de porcelana (destinado a humanos, no a análisis) Y
- analizarlo de manera confiable
....luego puede agregar la --porcelain
opción y usar la salida para secuencias de comandos.
Ejemplo: puedo usar git status --porcelain
y 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 .
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