Git push options
Table des matières
Ce matin un lapin, j’ai pris le temps de faire ce que je me promettais depuis des semaines: retirer mes alias bash
au profit d’alias git
en bonne et due forme.
J’en ai profité pour découvrir d’autres usages de la configuration de git
via le fichier .gitconfig
ou .git/config
tels que les options automatiques lors du push. Mais, il y a un mais: il faut parfois retoucher la configuration à la main pour arriver au résultat désiré.
Alias
Concernant les alias, rien de bien magique ici. Voici les quelques lignes que j’aurais aimé avoir à mes débuts avec git
:
Tirer et nettoyer
git config --global alias.p "pull --all --prune"
Permet de mettre à jour toutes les branches et supprimer localement les branches distantes supprimées.
Gitk
en CLI
git config --global alias.k "log --graph --abbrev-commit --decorate --oneline"
Affiche dans la console l’arbre git
actuel.
Push options
Pour le compte d’un client partenaire, nous avons mis en place un pipeline de CI/CD. Dans ce projet, nous disposons de plusieurs environnements: zeta
, alpha
, beta
etc. L’environnement par défaut pour les gens avec qui nous collaborons est alpha
mais pour les développements et tests, mon équipe utilise zeta
.
Sur gitlab
, il est possible de passer des variables lors du push ainsi: git push -o ci.variable="foo=bar"
. Afin de ne pas recouvrir les déploiements des personnes avec lesquelles nous travaillons, il nous faut donc systématiquement ajouter -o ci.variable="env=zeta"
. C’est typiquement l’oublie qu’il est facile de faire mais aussi et surtout le genre de chose qu’il devrait être facile à automatiser via une configuration propre au projet.
C’est d’ailleurs rendu possible depuis ce commit. Seulement, surprise, tout ne s’est pas passé comme prévu.
git config --add push.pushOption 'ci.variable="env=zeta"'
L’appel précédent ajoute le code suivant dans .git/config
:
[push]
pushOption = ci.variable=\"env=zeta\"
Seulement voilà, les guillements sont échappés. Cela n’aurait pas été un problème si les pushs suivants avaient échoué, mais il n’y avait aucune erreur visible alors même que plus aucun commit n’était poussé sur le dépôt distant.
En modifiant la configuration comme suit, non seulement les commits sont bien envoyés mais en plus la variable env
vaut bien zeta
en l’absence de toute autre option.
[push]
pushOption = ci.variable="env=zeta"