Cosa significa il termine "porcellana" in Git?


435

Il termine "porcellana" appare occasionalmente nella documentazione di Git. Cosa significa?

Risposte:


516

La "porcellana" è il materiale con cui vengono solitamente realizzati i servizi igienici (e talvolta altri dispositivi come i lavabi). Ciò si distingue dal "sistema idraulico" (i tubi e gli scarichi effettivi), in cui la porcellana fornisce un'interfaccia più intuitiva all'impianto idraulico.

Git usa questa terminologia in analogia, per separare i comandi di basso livello che gli utenti di solito non hanno bisogno di usare direttamente (il "sistema idraulico") dai comandi di alto livello più user-friendly (il "porcellanato").


45
Penso che la risposta abbia senso per me, ma poi suppongo che Linus sia stato quello che ha coniato il termine, quindi tendo ad adattare il mio cervello per essere un po 'più diretto e grossolano quando analizzo il suo mondo. :)
Nick Klauer,

58
Ti fa chiedere se Linus stesse immaginando i potenziali flussi di escrementi che i suoi impianti idraulici sarebbero stati usati per trasportare. L'impianto idraulico per il codice open source è un lavoro sporco ma qualcuno deve farlo.
Evan Plaice,

36
E alcuni di noi pensano che la vera porcellana git sia più simile a uno strato di vernice sull'impianto idraulico.
hemflit

14
l'altra risposta qui sotto è sia più vera che più utile
Charney Kaye,

14
qualcun altro lo trova comico?
Ben Wilde,

447

Ancora più importante, il termine "porcellana" si applica ai comandi di alto livello , con output:

  • voleva essere leggibile dall'essere umano
  • non voleva essere analizzato
  • suscettibile a cambiamenti / evoluzioni

Questa è la chiave: se si esegue lo script, è necessario utilizzare, se possibile , comandi idraulici , con output stabili. Non comandi di porcellana.

Tuttavia, puoi usare l'output di un comando di porcellana che ha --porcelainun'opzione nello script (vedi sotto), come:

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

Sebbene git includa il proprio strato di porcellana , i suoi comandi di basso livello sono sufficienti per supportare lo sviluppo di porcellane alternative.
L'interfaccia (input, output, set di opzioni e semantica) a questi comandi di basso livello è pensata per essere molto più stabile rispetto ai comandi di livello Porcelain, perché questi comandi sono principalmente per l'uso con script .
L'interfaccia con i comandi di Porcelain invece è soggetta a modifiche al fine di migliorare l'esperienza dell'utente finale.

Vedi " Come posso determinare a livello di codice se ci sono modifiche senza commit? " Come esempio per usare i comandi idraulici invece di quelli di porcellana.


Nota: un comando di porcellana può avere --porcelainun'opzione.
Ad esempio:, git status --porcelainche designa un output destinato ad essere analizzato .

--porcelain

Fornisci l'output in un formato facile da analizzare per gli script. Questo è simile all'output breve, ma rimarrà stabile tra le versioni git e indipendentemente dalla configurazione dell'utente. Vedi sotto per i dettagli.

La discussione sopra menzionata dettagli:

Questa è colpa mia, in una certa misura.
La forma dello "stato corto" è pensata per i bulbi oculari umani ed è stata progettata da Junio.
Alcune persone volevano anche un output dello stato tramite script, quindi ho dato uno " --porcelain" allo stesso formato che disattiva le funzioni configurabili come i relativi percorsi e colorazione e promette implicitamente che non avremo ulteriori modifiche al formato.
L'idea era di impedire alle persone di scrivere script in giro --short, perché non era mai stato pensato per essere stabile.
Quindi sì, mentre di --porcelainper sé è stabile e programmabile, forse non è il più amichevole per i parser. Il -z --porcelainformato " " è molto di più, e lo consiglierei a chiunque scriva "git status"

Ciò riflette la necessità, per gli utenti git, di usare i comandi di porcellana nei loro script!
Ma solo con output stabile (con --porcelain)


Come commentato da William-Berg , lo stesso vale git push!

--porcelain

Produce un output leggibile dalla macchina.
La riga di stato dell'output per ciascun riferimento verrà separata da tabulazione e inviata stdoutinvece di stderr.
Verranno forniti i nomi simbolici completi degli arbitri.


Come John Glassmyer propone nei commenti :

Forse il significato di --porcelainqui è "produrre output adatto al consumo mediante script in porcellana" .

E ciò potrebbe essere supportato dal primo caso dell'introduzione di " --porcelainopzioni"
(prima git status --porcelain, commit 6f15787, settembre 2009, git 1.7.0 ,
prima git push --porcelain, commit 1965ff7, giugno 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Mostra in un formato progettato per il consumo della macchina.

Commit b5c698d, ottobre 2006, git 1.4.4

La nuova opzione rende il formato di output nativo del comando per emettere output che è più facile da gestire da Porcelain .


2
Ho notato che git pushè leggibile in modo analogo dalla macchina --porcelain.
william.berg,

13
Forse il significato di --porcelainqui è "produrre output adatto al consumo mediante script in porcellana".
John Glassmyer,

@JohnGlassmyer è davvero una spiegazione molto probabile. Vedi la mia risposta modificata (alla fine)
VonC

1
Inoltregit diff-tree --word-diff=porcelain
Nicholas Shanks,

1
@PatrickSanan in un certo senso, sì. Il loro output può essere analizzato in modo affidabile con quell'opzione.
VonC

57

Il conio e l'uso del termine "porcellana" in git furono in realtà di Mike Taht, mentre altrimenti perse una discussione accesa con Linus Torvalds.

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

In effetti, una delle mie speranze era che gli altri SCM potessero semplicemente usare l'idraulica git.
Ma poi suggerirei davvero di usare "git" stesso, non alcun " libgit". Vale a dire che prendi tutto l'impianto idraulico come programmi reali e invece di cercare di collegarti a routine individuali, lo scriveresti .

Se non lo vuoi, non lo farò.
Tuttavia ha ancora senso separare l'impianto idraulico dalla porcellana .


7
Interessante. +1. La mia risposta sopra è dall'uso del prodotto, ma il tuo link fa riferimento a quella che sembra essere l'origine di quel termine.
VonC,

21

Porcelain è un nome carino per programmi e suite di programmi a seconda del core git, che presenta un accesso di alto livello al core git. Le porcellane espongono più di un'interfaccia SCM che il "sistema idraulico".

- Porcellana , Git Wiki


7

I comandi in porcellana sono progettati per il consumo umano, al contrario dei comandi il cui output è facile da analizzare per i computer. git statussarebbe un esempio.


8
"Porcellana" ... "per il consumo umano" ... Posso mangiare il vetro . (sto solo scherzando / notando metafora mista per chiunque possa essere facilmente confuso)
ajm475du

5
I comandi di porcellana sono per il consumo umano, ma quando si utilizza l' --porcelainopzione, è per il consumo della macchina.
ThomasW,

git status --porcelain: Fornisce l'output in un formato facile da analizzare per gli script. (...) ma rimarrà stabile tra le versioni di Git e indipendentemente dalla configurazione dell'utente.
tymtam,

Grazie per il downvote. 🙄 Sì, git status --porcelainha un formato stabile che può essere analizzato, ma il statuscomando stesso è progettato per essere rivolto all'utente (al contrario, ad esempio, git ls-files).
dahlbyk,

7

La breve e semplice spiegazione

  • Esistono due tipi di comandi: "poreclain" e "plumbing".
  • I comandi " Porcelain " non dovrebbero essere fatti valere durante la programmazione / scripting: perché possono cambiare e sono pensati per gli umani non per le macchine.
  • I comandi " Idraulici " dovrebbero essere usati per gli script, perché sono più stabili e hanno meno probabilità di cambiare.

Ma per quanto riguarda l' --porcelainopzione confusa !?

  • Se vuoi: (i) usare un comando di porcellana E (ii) vuoi assicurarti che l'output possa essere analizzato in modo affidabile (ricorda, i comandi di porcellana sono pensati solo per gli umani e non analizzano), quindi puoi aggiungere l' --porcelainopzione e poi usa l'output per lo scripting. Fondamentalmente gli autori di git promettono implicitamente di non cambiare nulla lì dentro, in qualunque momento presto. esempio: potrei usare git status --porcelaine usare l'output per lo scripting e sarebbe perfettamente ok.

Da dove viene la terminologia della porcellana / idraulica?


1
Che dire dell'opzione --porcelain confusa? Rivolgo che nella mia risposta: stackoverflow.com/a/6978402/6309
VonC

concordato! Avevo aggiunto un link alla tua stessa risposta sopra:For more detail, checkout VonC's answer.
BKSpurgeon,

OK, almeno usando un'opzione nominata --porcelainsu comandi già "porcellana" per ottenere la funzionalità "pseudo-impianto idraulico" si fonde molto bene con il design generale dell'interfaccia utente di Git ...;)
Sz.

1
Non capisco perché questa opzione si chiama "porcellana". L'intero comando è già "porcellana". L'opzione dovrebbe essere chiamata --plumbing(poiché questa volta sei un idraulico, non un normale utente "porcellana").
seeker_of_bacon il

3

La risposta di Greg Hewgill è esattamente corretta. Nota che ci sono porcellane alternative disponibili per Git, tra cui Easy Git, yap, pyrite e vng. Ciascuno ha lo scopo di rendere Git più facile da imparare / utilizzare per alcune parti della comunità. I collegamenti a tutti questi progetti si trovano nella pagina Easy Git: http://people.gnome.org/~newren/eg/ .



1

Ci sono due significati distinti di porcellana in git.

Questi due significati, sebbene possano essere argomentati non strettamente contraddittori, possono apparire contraddittori.

A. Concettuale (idraulico contro porcellana)

Il libro ufficiale di Pro Git :

Ma poiché Git era inizialmente un toolkit per un sistema di controllo della versione piuttosto che un VCS completo e facile da usare, ha un numero di sottocomandi che fanno un lavoro di basso livello e sono stati progettati per essere concatenati in stile UNIX o chiamati da script. Questi comandi sono generalmente indicati come comandi "idraulici" di Git, mentre i comandi più intuitivi sono chiamati comandi "porcellana".

B. --porcelain/ =porcelainopzioni

Molti comandi git sono dotati di --porcelainun'opzione, che è significato per lo scripting.

git status' documentazione :

--porcelain[=<version>]

Fornisci l'output in un formato facile da analizzare per gli script. Questo è simile all'output breve, ma rimarrà stabile tra le versioni di Git e indipendentemente dalla configurazione dell'utente. Vedi sotto per i dettagli.

git diff's documentazione :

--word-diff[=<mode>]

porcellana

      Utilizzare uno speciale formato basato su riga destinato al consumo di script.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.