Porcelaine et plomberie : typologie et rôles des commandes
Par Maxime Bréhin • Publié le 13 mai 2022

Mise à jour le 28 juin 2022, 21:48

Sais-tu que Git possède 141 commandes ? Sais-tu aussi que parmi ces commandes on distingue entre les commandes utiles à l'utilisateur·rice (porcelaine) et celles de plus bas niveau, plutôt utiles aux scripts (plomberie) ?

Voyons tout ça, vite fait bien fait !

Cet article fait partie de notre série sur le glossaire Git.

Tu préfères une vidéo ?

Si tu es du genre à préférer regarder que lire pour apprendre, on a pensé à toi :

Pourquoi ce vocabulaire ?

Tu l’as sans doute compris, la documentation Git décrit par une métaphore les 2 grands groupes de commandes qui le composent.

Imagine que tu veuilles te laver les mains 🤲. Ça paraît logique d’aller au lavabo, d’actionner le robinet et de laisser s'écouler l’eau par la bonde 🚰 plutôt que de sortir le poste à souder, la colle PVC et de bricoler arrivée et évacuation d’eau 👩‍🔧.

En tant qu’utilisateur·rice « classique » Git on va donc interagir davantage avec la porcelaine qu’avec la plomberie.

Qu’est-ce qui les distingue ?

On a une distinction technique pour une partie des commandes de porcelaine dans le terminal car celles-ci bénéficient de la complétion (tu sais, quand tu commences à saisir la commande et que tu fais Tab pour l’autocomplétion).

De manière générale, les commandes de porcelaine sont construites à partir des commandes de plomberie. Tu peux donc sereinement te concentrer sur la porcelaine tout en gardant à l’esprit que, pour des cas particuliers, comme des scripts techniques, tu devras peut-être recourir aux commandes de plomberie.

Du coup, on a quoi en porcelaine ?

On compte 41 commandes "principales" de porcelaine (mai 2022 / Git 2.36). Mais on utilise généralement au quotidien 10 à 20 de ces commandes. Pourquoi ? Parce que certaines ont un usage occasionnel, lié à un workflow spécifique.

Par exemple, l’envoi puis l’application automatique des patchs par e-mail via git format-patch, git send-mail et git am est lié au workflow historique du noyau Git. Il y a fort à parier qu’il serait irritant pour toi aujourd’hui.

Voici la liste des commandes de porcelaine listées par Git (je t’ai mis en gras celles que je considère utiles régulièrement 😉) :

Commande Rôle
add Ajouter le contenu de fichiers dans l'index
am Appliquer une série de patchs depuis une boîte mail
archive Créer une archive des fichiers depuis un arbre nommé
bisect Trouver par dichotomie la modification qui a introduit un bug
branch Lister, créer ou supprimer des branches
bundle Déplacer des objets et références via une archive
checkout Basculer de branche ou restaurer la copie de travail (voir switch)
cherry-pick Appliquer les modifications introduites par des commits existants
citool Alternative graphique à commit
clean Supprimer les fichiers non-suivis de l'arbre de travail
clone Cloner un dépôt dans un nouveau répertoire
commit Enregistrer les modifications dans le dépôt
describe Baptiser un objet avec un nom lisible à partir d'une référence disponible
diff Afficher les changements entre les commits, entre commit et copie de travail, etc.
fetch Télécharger les objets et références depuis un autre dépôt / un dépôt distant
format-patch Préparer les patchs pour soumission par courriel
gc Effacer les fichiers non-nécessaires et optimiser le dépôt local
gitk Naviguer visuellement dans un dépôt Git
grep Afficher les lignes de fichiers suivis correspondant à un motif
gui Une interface graphique portable pour Git
init Créer un dépôt Git vide ou réinitialiser un existant
log Afficher l'historique des commits
maintenance Lancer les tâches d'optimisation des données du depôt Git
merge Fusionner deux ou plusieurs historiques de développement ensemble
mv Déplacer ou renommer un fichier, un répertoire ou un lien symbolique
notes Ajouter ou inspecter les notes d'un objet
pull Rapatrier et intégrer un autre dépôt ou une branche locale
push Mettre à jour les références distantes ainsi que les objets associés
range-diff Comparer deux plages de commits (par exemple deux versions d'une branche)
rebase Réappliquer des commits par-dessus une autre base de travail (en vrai ça fait plus 😉)
reset Réinitialiser le HEAD courant à l'état spécifié
restore Restaurer des fichiers de la copie de travail
revert Créer un commit annulant un commit existant
rm Supprimer des fichiers de la copie de travail et de l'index
shortlog Résumer la sortie de 'git log'
show Afficher différents types d'objets
sparse-checkout Initialiser et modifier une extraction partielle
stash Remiser les modifications en cours d'une copie de travail
status Afficher l'état de la copie de travail et de l'index
submodule Initialiser, mettre à jour et inspecter les sous-modules
switch Basculer de branche
tag Créer, lister, supprimer un objet d'étiquette ou vérifier sa signature
worktree Gérer des copies de travail multiples

Si tu es curieux·se, tu peux obtenir une liste plus détaillée en faisant un git help --all.

Comme je l’ai décrit plus haut, il s’agit des commandes de porcelaine décrites par la doc’ comme « principales ». Je t’ajoute un complément de commandes que j’affectionne et utilise régulièrement :

Commande Rôle
config Voir et régler les options globales ou de dépôt
reflog Gérer l'information de reflog (ça on en reparlera avec reset)
help Afficher l'information d'aide à propos de Git (forcément 🙂)

Au-delà de ces commandes on trouve aussi de nombreuses options disponibles, ce qui étend le champ des possibles 🤩. Ça n’est évidemment pas le sujet de cet article, mais tu peux parcourir nos autres articles et te tenir informé·e en t’abonnant à notre newsletter, à notre chaîne YouTube, en nous suivant sur Twitter ou encore mieux, en suivant notre formation du feu de dieu 🔥 : Git Total !

Découvrez nos cours vidéo ! 🖥

Nos cours vidéo sont un complément idéal et bon marché à nos articles techniques et formations présentielles. Autour de Git, de JavaScript et d’autres sujets, retrouvez des contenus de très grande qualité à des prix abordables, spécialement conçus pour lever vos plus gros points de blocage.