Que signifie le terme «porcelaine» dans Git?

435

Le terme "porcelaine" apparaît occasionnellement dans la documentation de Git. Qu'est-ce que ça veut dire?

Jan Hettich
la source

Réponses:

516

La "porcelaine" est le matériau à partir duquel les toilettes sont généralement fabriquées (et parfois d'autres luminaires tels que les lavabos). Ceci est distinct de la "plomberie" (les tuyaux et les drains réels), où la porcelaine fournit une interface plus conviviale avec la plomberie.

Git utilise cette terminologie par analogie, pour séparer les commandes de bas niveau que les utilisateurs n'ont généralement pas besoin d'utiliser directement (la "plomberie") des commandes de haut niveau plus conviviales (la "porcelaine").

Greg Hewgill
la source
45
Je pense que la réponse est logique pour moi, mais là encore, je suppose que Linus est celui qui a inventé le terme, j'ai donc tendance à ajuster mon cerveau pour être un peu plus direct et grossier lors de l'analyse de son monde. :)
Nick Klauer
58
Vous vous demandez si Linus imaginait les flux potentiels d'excréments que sa plomberie serait utilisée pour transporter. La plomberie pour le code open source est un sale boulot mais quelqu'un doit le faire.
Evan Plaice
36
Et certains d'entre nous pensent que la porcelaine Git réelle ressemble plus à une couche de peinture sur la plomberie.
Hemflit
14
l'autre réponse ci-dessous est à la fois plus vraie et plus utile
Charney Kaye
14
quelqu'un d'autre trouve-t-il cette bande dessinée?
Ben Wilde
447

Plus important encore, le terme "porcelaine" s'applique aux commandes de haut niveau , avec sortie:

  • destiné à être lisible par l'homme
  • pas destiné à être analysé
  • sensible aux changements / évolutions

C'est la clé: si vous scriptez, vous devez utiliser si possible des commandes de plomberie , avec des sorties stables. Pas des commandes en porcelaine.

Cependant, vous pouvez utiliser la sortie d'une commande porcelain qui a une --porcelainoption dans le script (voir ci-dessous), comme:

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

Bien que git inclut sa propre couche de porcelaine , ses commandes de bas niveau sont suffisantes pour soutenir le développement de porcelaines alternatives.
L'interface (entrée, sortie, ensemble d'options et la sémantique) de ces commandes de bas niveau est censée être beaucoup plus stable que les commandes de niveau Porcelain, car ces commandes sont principalement destinées à un script .
En revanche, l'interface avec les commandes Porcelain est susceptible d'être modifiée afin d'améliorer l'expérience de l'utilisateur final.

Voir « Comment puis-je déterminer par programme s'il y a des modifications non validées? » Comme exemple d'utilisation des commandes de plomberie au lieu de celles en porcelaine.


Remarque: Une commande porcelaine peut avoir une --porcelainoption.
Par exemple:, git status --porcelainqui désigne une sortie destinée à être analysée .

--porcelain

Donnez la sortie dans un format facile à analyser pour les scripts. Ceci est similaire à la sortie courte, mais restera stable dans toutes les versions de git et quelle que soit la configuration de l'utilisateur. Voir ci-dessous pour plus de détails.

Le fil mentionné ci-dessus détaille:

C'est ma faute, dans une certaine mesure.
La forme "à statut court" est destinée aux globes oculaires humains et a été conçue par Junio.
Certaines personnes voulaient également une sortie d'état scriptable, j'ai donc giflé un " --porcelain" sur le même format qui désactive les fonctionnalités configurables comme les chemins d'accès relatifs et la colorisation, et fait une promesse implicite que nous n'apporterons plus de modifications au format.
L'idée était d'empêcher les gens de créer des scripts --short, car il n'a jamais été conçu pour être stable.
Alors oui, bien que --porcelainpar lui - même stable et scriptable, il n'est peut-être pas le plus convivial pour les analyseurs. Le -z --porcelainformat " " l'est beaucoup plus, et je le recommanderais à quiconque écrit autour de "git status"

Cela reflète la nécessité, pour les utilisateurs de git, d'utiliser des commandes porcelain dans leurs scripts!
Mais seulement avec une sortie stable (avec --porcelain)


Comme commenté par william-berg , la même chose pour git push!

--porcelain

Produisez une sortie lisible par machine.
La ligne d'état de sortie pour chaque référence sera séparée par des tabulations et envoyée à la stdoutplace de stderr.
Les noms symboliques complets des arbitres seront donnés.


Comme John Glassmyer le propose dans les commentaires :

Peut ---porcelain être que le sens ici est "produire des résultats propres à la consommation par des scripts en porcelaine" .

Et cela pourrait être soutenu par le tout premier cas d' --porcelainintroduction d '" option"
(avant git status --porcelain, commit 6f15787, septembre 2009, git 1.7.0 ,
avant git push --porcelain, commit 1965ff7, juin 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Afficher dans un format conçu pour la consommation de la machine.

Commit b5c698d, octobre 2006, git 1.4.4

La nouvelle option permet au format de sortie natif de la commande d'émettre une sortie plus facile à gérer par Porcelain .

VonC
la source
2
Je remarque qu'il git pusha une anomalie similaire lisible par machine --porcelain.
william.berg
13
Peut-être que le sens --porcelainici est "produire des résultats propres à la consommation par des scripts en porcelaine".
John Glassmyer
@JohnGlassmyer c'est en effet une explication très probable. Voir ma réponse modifiée (à la fin)
VonC
1
Aussigit diff-tree --word-diff=porcelain
Nicholas Shanks
1
@PatrickSanan dans un sens, oui. Leur sortie peut être analysée de manière fiable avec cette option.
VonC
57

Le monnayage et l'utilisation du terme "porcelaine" en git ont en fait été commis par Mike Taht, tout en perdant autrement une vive discussion avec Linus Torvalds.

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

En fait, l'un de mes espoirs était que d'autres SCM pourraient simplement utiliser la plomberie git.
Mais alors je vous suggère vraiment d'utiliser "git" lui-même, pas n'importe quel " libgit". C'est-à-dire que vous prenez toute la plomberie comme de vrais programmes, et au lieu d'essayer de vous lier à des routines individuelles, vous le scripteriez .

Si vous n'en voulez pas, je ne le ferai pas.
Cependant, il est toujours judicieux de séparer la plomberie de la porcelaine .

dave taht
la source
7
Intéressant. +1. Ma propre réponse ci - dessus provient de l'utilisation du produit, mais votre lien fait référence à ce qui semble être l'origine de ce terme.
VonC
21

La porcelaine est un nom mignon pour les programmes et les suites de programmes selon Core Git, présentant un accès de haut niveau à Core Git. Les porcelaines exposent plus une interface SCM que la "plomberie".

- Porcelaine , Git Wiki

Johnsyweb
la source
7

Les commandes en porcelaine sont conçues pour la consommation humaine, contrairement aux commandes dont la sortie est facile à analyser pour les ordinateurs. git statusserait un exemple.

dahlbyk
la source
8
"Porcelaine" ... "pour la consommation humaine" ... Je peux manger du verre . (je plaisante / je note une métaphore mixte pour tous ceux qui peuvent être facilement confondus)
ajm475du
5
Les commandes de porcelaine sont destinées à la consommation humaine, mais lorsque vous utilisez l' --porcelainoption, elles concernent la consommation de la machine.
ThomasW
git status --porcelain: Donnez la sortie dans un format facile à analyser pour les scripts. (...) mais restera stable dans toutes les versions de Git et quelle que soit la configuration de l'utilisateur.
tymtam
Merci pour le downvote. 🙄 Oui, git status --porcelaina un format stable qui peut être analysé, mais la statuscommande elle-même est conçue pour être accessible à l'utilisateur (par opposition à, par exemple,git ls-files ).
dahlbyk
7

L'explication courte et simple

  • Il existe deux types de commandes: "poreclain" et "plumbing".
  • Les commandes " Porcelaine " ne doivent pas être utilisées lors de la programmation / scripting: car elles sont susceptibles de changer et sont destinées aux humains et non aux machines.
  • Les commandes " Plomberie " doivent être utilisées pour les scripts, car elles sont plus stables et sont moins susceptibles de changer.

Mais qu'en est-il de l' --porcelainoption déroutante !?

  • Si vous souhaitez: (i) utiliser une commande porcelaine ET (ii) vous voulez vous assurer que la sortie peut être analysée de manière fiable (rappelez-vous, les commandes porcelaine sont destinées uniquement aux humains et non à l'analyse), alors vous pouvez ajouter l' --porcelainoption, puis utilisez la sortie pour les scripts. Fondamentalement, les auteurs de git promettent implicitement de ne rien y changer, de sitôt. exemple: je peux utiliser git status --porcelainet utiliser la sortie pour les scripts et ce serait parfaitement correct.

D'où vient la terminologie porcelaine / plomberie?

BKSpurgeon
la source
1
Qu'en est-il de l'option --porcelain déroutante?
J'aborde
D'accord! J'avais ajouté un lien vers votre réponse ci-dessus:For more detail, checkout VonC's answer.
BKSpurgeon
OK, au moins en utilisant une option nommée --porcelainsur des commandes déjà "porcelaine" pour obtenir la fonctionnalité "pseudo-plomberie", cela se marie très bien avec la conception générale de l'interface utilisateur de Git ...;)
Sz.
1
Je ne comprends pas pourquoi cette option est appelée "porcelaine". La commande entière est déjà "porcelaine". L'option doit être appelée --plumbing(puisque vous êtes plombier cette fois, pas un utilisateur régulier de "porcelaine").
seeker_of_bacon
3

La réponse de Greg Hewgill est exactement correcte. Notez qu'il existe des porcelaines alternatives disponibles pour Git, y compris Easy Git, yap, pyrite et vng. Chacun est destiné à rendre Git plus facile à apprendre / à utiliser pour une partie de la communauté. Les liens vers tous ces projets se trouvent sur la page Easy Git: http://people.gnome.org/~newren/eg/ .

Pablo Halpern
la source
1

Il y a deux significations distinctes de porcelaine dans git.

Ces deux significations, bien qu'elles puissent être argumentées ne sont pas strictement contradictoires, peuvent apparaître contradictoires.

A. Conceptuel (plomberie vs porcelaine)

Le livre officiel de Pro Git :

Mais comme Git était initialement une boîte à outils pour un système de contrôle de version plutôt qu'un VCS complet et convivial, il a un certain nombre de sous-commandes qui effectuent un travail de bas niveau et ont été conçues pour être enchaînées de style UNIX ou appelées à partir de scripts. Ces commandes sont généralement appelées commandes «plomberie» de Git, tandis que les commandes plus conviviales sont appelées commandes «porcelaine».

B. --porcelain/ =porcelainoptions

De nombreuses commandes git viennent avec une --porcelainpossibilité qui est destiné à des scripts.

git status« documentation :

--porcelain[=<version>]

Donnez la sortie dans un format facile à analyser pour les scripts. Ceci est similaire à la sortie courte, mais restera stable dans toutes les versions de Git et quelle que soit la configuration de l'utilisateur. Voir ci-dessous pour plus de détails.

git diffla documentation de :

--word-diff[=<mode>]

porcelaine

      Utilisez un format de ligne spécial destiné à la consommation de scripts.

tymtam
la source