Porcelaine et plomberie : typologie et rôles des commandes
Par Maxime Bréhin • Publié le 13 mai 2022
• 3 min
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 🙂) |