Was bedeutet der Begriff "Porzellan" in Git?

433

Der Begriff "Porzellan" erscheint gelegentlich in der Git-Dokumentation. Was bedeutet das?

Jan Hettich
quelle

Antworten:

515

"Porzellan" ist das Material, aus dem normalerweise Toiletten hergestellt werden (und manchmal auch andere Armaturen wie Waschbecken). Dies unterscheidet sich von "Sanitär" (den eigentlichen Rohren und Abflüssen), bei denen das Porzellan eine benutzerfreundlichere Schnittstelle zum Sanitär bietet.

Git verwendet diese Terminologie in Analogie, um die Befehle auf niedriger Ebene, die Benutzer normalerweise nicht direkt verwenden müssen (das "Sanitär"), von den benutzerfreundlicheren Befehlen auf hoher Ebene (das "Porzellan") zu trennen.

Greg Hewgill
quelle
45
Ich denke, die Antwort macht für mich Sinn, aber andererseits gehe ich davon aus, dass Linus derjenige war, der den Begriff geprägt hat, also neige ich dazu, mein Gehirn so anzupassen, dass es etwas direkter und krasser ist, wenn ich seine Welt analysiere. :)
Nick Klauer
58
Sie wundern sich, ob Linus sich die potenziellen Exkrementströme vorstellte, die seine Rohrleitungen zum Transport verwenden würden. Das Installieren von Open Source Code ist ein schmutziger Job, aber jemand muss es tun.
Evan Plaice
36
Und einige von uns glauben, dass das eigentliche Git-Porzellan eher wie eine Farbschicht über dem Wasser ist.
Hemflit
14
andere Antwort unten ist sowohl wahrer als auch nützlicher
Charney Kaye
14
findet das sonst noch jemand komisch?
Ben Wilde
446

Noch wichtiger ist, dass der Begriff "Porzellan" für Befehle auf hoher Ebene mit folgenden Ausgaben gilt:

  • soll für den Menschen lesbar sein
  • nicht dazu gedacht, analysiert zu werden
  • anfällig für Veränderungen / Entwicklungen

Das ist der Schlüssel: Wenn Sie Skript, Sie , wenn möglich , verwenden sollten , Sanitär - Befehle , mit stabilen Ausgängen. Keine Porzellankommandos.

Allerdings können Sie die Ausgabe eines Porzellan Befehl verwenden , die eine hat --porcelainOption Skript (siehe unten), wie:

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

Obwohl Git eine eigene Porzellanschicht enthält , reichen seine Befehle auf niedriger Ebene aus, um die Entwicklung alternativer Porzellane zu unterstützen.
Die Schnittstelle (Eingabe, Ausgabe, Optionssatz und Semantik) zu diesen Befehlen auf niedriger Ebene soll wesentlich stabiler sein als Befehle auf Porzellanebene, da diese Befehle hauptsächlich für die Verwendung mit Skripten bestimmt sind .
Die Benutzeroberfläche für Porzellanbefehle kann sich jedoch ändern, um die Endbenutzererfahrung zu verbessern.

Siehe " Wie kann ich programmgesteuert feststellen, ob nicht festgeschriebene Änderungen vorliegen? " Als Beispiel für die Verwendung von Installationsbefehlen anstelle von Porzellanbefehlen.


Hinweis: Ein Porzellanbefehl kann eine --porcelainOption haben.
Zum Beispiel : git status --porcelain, was eine Ausgabe bezeichnet, die analysiert werden soll .

--porcelain

Geben Sie die Ausgabe in einem einfach zu analysierenden Format für Skripte an. Dies ähnelt der kurzen Ausgabe, bleibt jedoch in allen Git-Versionen und unabhängig von der Benutzerkonfiguration stabil. Siehe unten für Details.

Der oben erwähnte Thread Details:

Das ist bis zu einem gewissen Grad meine Schuld.
Das Formular "Kurzstatus" ist für menschliche Augäpfel gedacht und wurde von Junio ​​entworfen.
Einige Leute wollten auch eine skriptfähige Statusausgabe, deshalb habe ich ein " --porcelain" auf dasselbe Format gesetzt, das konfigurierbare Funktionen wie relative Pfadnamen und Kolorierung deaktiviert, und implizit versprochen, dass wir keine weiteren Änderungen am Format vornehmen werden.
Die Idee war, Leute daran zu hindern, Skripte zu schreiben --short, weil es niemals stabil sein sollte.
Also ja, während --porcelainselbst ist stabil und skriptfähig , ist es vielleicht nicht das freundlichste zu Parsern. Das " -z --porcelain" Format ist viel mehr, und ich würde es jedem empfehlen, der sich mit "Git Status" beschäftigt.

Dies spiegelt die Notwendigkeit für Git-Benutzer wider, Porzellanbefehle in ihren Skripten zu verwenden!
Aber nur mit stabiler Leistung (mit --porcelain)


Wie von William-Berg kommentiert , gilt das Gleiche !git push

--porcelain

Maschinenlesbare Ausgabe erzeugen.
Die Ausgangsstatuszeile für jede ref wird auf Tabula getrennt und gesendet wird , stdoutstatt stderr.
Die vollständigen symbolischen Namen der Refs werden angegeben.


Wie John Glassmyer in den Kommentaren vorschlägt :

Vielleicht ist die Bedeutung von --porcelainhier "Produktion produzieren, die für den Verbrauch durch Porzellanskripte geeignet ist" .

Und dies könnte durch den allerersten Fall der --porcelainEinführung von " Optionen" unterstützt werden
(vorher git status --porcelainCommit 6f15787, September 2009, Git 1.7.0 ,
vorher git push --porcelainCommit 1965ff7, Juni 2009, Git 1.6.4 ):

git blame --porcelain::

-p
--porcelain

In einem Format anzeigen, das für den Maschinenverbrauch ausgelegt ist.

Commit b5c698d, Oktober 2006, git 1.4.4

Mit der neuen Option kann das native Ausgabeformat des Befehls eine Ausgabe ausgeben, die für Porzellan einfacher zu handhaben ist .

VonC
quelle
2
Ich stelle fest, dass git pusheine ähnlich anomale maschinenlesbare --porcelain.
William.berg
13
Vielleicht ist die Bedeutung von --porcelainhier "Produktion produzieren, die für den Verbrauch durch Porzellanskripte geeignet ist".
John Glassmyer
@ JohnGlassmyer es ist in der Tat eine sehr wahrscheinliche Erklärung. Siehe meine bearbeitete Antwort (am Ende)
VonC
1
Auchgit diff-tree --word-diff=porcelain
Nicholas Shanks
1
@ PatrickSanan in gewissem Sinne, ja. Ihre Ausgabe kann mit dieser Option zuverlässig analysiert werden.
VonC
57

Die Münzprägung und Verwendung des Begriffs "Porzellan" in Git stammte eigentlich von Mike Taht, während er ansonsten einen heftigen Streit mit Linus Torvalds verlor.

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

Tatsächlich war eine meiner Hoffnungen, dass andere SCMs nur die Git-Klempnerarbeiten verwenden könnten.
Aber dann würde ich wirklich vorschlagen, dass Sie "git" selbst verwenden, nicht " libgit". Dh nehmen Sie alle der Sanitär als echte Programme, und stattdessen Link gegen einzelne Routinen versuchen, würden Sie Skript es.

Wenn du es nicht willst, werde ich es nicht tun.
Trotzdem macht es Sinn, die Rohrleitungen vom Porzellan zu trennen .

Dave Taht
quelle
7
Interessant. +1. Meine eigene Antwort oben stammt von der Verwendung des Produkts, aber Ihr Link verweist auf den Ursprung dieses Begriffs.
VonC
21

Porzellan ist ein süßer Name für Programme und Programmsuiten, die je nach Core-Git einen hohen Zugang zum Core-Git bieten. Porzellane legen mehr eine SCM-Schnittstelle frei als die "Sanitär".

- Porzellan , Git Wiki

Johnsyweb
quelle
7

Porzellanbefehle sind für den menschlichen Verzehr konzipiert, im Gegensatz zu Befehlen, deren Ausgabe für Computer leicht zu analysieren ist. git statuswäre ein Beispiel.

Dahlbyk
quelle
8
"Porzellan" ... "für den menschlichen Verzehr" ... ich kann Glas essen . (nur ein Scherz / eine gemischte Metapher für jeden, der leicht verwirrt sein kann)
ajm475du
5
Porzellanbefehle sind für den menschlichen Gebrauch bestimmt, aber wenn Sie diese --porcelainOption verwenden, ist sie für den maschinellen Verbrauch bestimmt.
ThomasW
git status --porcelain: Geben Sie die Ausgabe in einem einfach zu analysierenden Format für Skripte an. (...) bleibt jedoch in allen Git-Versionen und unabhängig von der Benutzerkonfiguration stabil.
Tymtam
Danke für die Ablehnung. 🙄 Ja, git status --porcelainhat ein stabiles Format, das analysiert werden kann, aber der statusBefehl selbst ist so konzipiert, dass er dem Benutzer zugewandt ist (im Gegensatz zu beispielsweise git ls-files).
Dahlbyk
7

Die kurze und einfache Erklärung

  • Es gibt zwei Arten von Befehlen: "poreclain" und "plumbing".
  • Bei der Programmierung / Skripterstellung sollte man sich nicht auf " Porzellan " -Befehle verlassen, da sie sich wahrscheinlich ändern und für Menschen und nicht für Maschinen bestimmt sind.
  • " Plumbing " -Befehle sollten für die Skripterstellung verwendet werden, da sie stabiler sind und sich weniger wahrscheinlich ändern.

Aber was ist mit der verwirrenden --porcelainOption?

  • Wenn Sie: (i) einen Porzellanbefehl verwenden UND (ii) sicherstellen möchten, dass die Ausgabe zuverlässig analysiert werden kann (denken Sie daran, Porzellanbefehle sind nur für Menschen gedacht und nicht für das Parsen), können Sie die --porcelainOption hinzufügen und dann Verwenden Sie die Ausgabe für die Skripterstellung. Grundsätzlich versprechen die Autoren von git implizit, in naher Zukunft nichts daran zu ändern. Beispiel: Ich kann git status --porcelaindie Ausgabe für Skripte verwenden, und das wäre vollkommen in Ordnung.

Woher kommt die Terminologie für Porzellan / Sanitär?

BKSpurgeon
quelle
1
Was ist mit der verwirrenden Option - Porzellan? Ich spreche
VonC
einverstanden! Ich hatte einen Link zu Ihrer Antwort oben hinzugefügt:For more detail, checkout VonC's answer.
BKSpurgeon
OK, zumindest die Verwendung einer Option, die --porcelainin bereits "Porzellan" -Befehlen genannt wird, um die "Pseudo-Sanitär" -Funktionalität zu erreichen, passt sehr gut zum allgemeinen UI-Design von Git ...;)
Sz.
1
Ich verstehe nicht, warum diese Option "Porzellan" genannt wird. Der gesamte Befehl ist bereits "Porzellan". Die Option sollte aufgerufen werden --plumbing(da Sie diesmal ein Klempner sind und kein normaler "Porzellan" -Benutzer).
seeker_of_bacon
3

Greg Hewgills Antwort ist genau richtig. Beachten Sie, dass für Git alternative Porzellane verfügbar sind, darunter Easy Git, Yap, Pyrit und Vng. Jedes soll Git das Erlernen / Verwenden für einen Teil der Community erleichtern. Links zu all diesen Projekten finden Sie auf der Easy Git-Seite: http://people.gnome.org/~newren/eg/ .

Pablo Halpern
quelle
1

Es gibt zwei verschiedene Bedeutungen von Porzellan in Git.

Diese beiden Bedeutungen sind zwar nicht streng widersprüchlich, können aber widersprüchlich erscheinen.

A. Konzeptionell (Sanitär gegen Porzellan)

Das offizielle Pro Git Buch :

Da Git ursprünglich ein Toolkit für ein Versionskontrollsystem und kein vollständig benutzerfreundliches VCS war, verfügt es über eine Reihe von Unterbefehlen, die auf niedriger Ebene ausgeführt werden und so konzipiert sind, dass sie im UNIX-Stil verkettet oder aus Skripten aufgerufen werden. Diese Befehle werden im Allgemeinen als "Plumbing" -Befehle von Git bezeichnet, während die benutzerfreundlicheren Befehle als "Porzellan" -Befehle bezeichnet werden.

B. --porcelain/ =porcelainOptionen

Viele git Befehle werden mit einer --porcelainOption , die ist für Scripting gemeint.

git status' Dokumentation :

--porcelain[=<version>]

Geben Sie die Ausgabe in einem einfach zu analysierenden Format für Skripte an. Dies ähnelt der kurzen Ausgabe, bleibt jedoch in allen Git-Versionen und unabhängig von der Benutzerkonfiguration stabil. Siehe unten für Details.

git diff‚s - Dokumentation :

--word-diff[=<mode>]

Porzellan

      Verwenden Sie ein spezielles zeilenbasiertes Format für den Skriptverbrauch.

Tymtam
quelle