Rolinh

Rolinh' release

Un Script Pour Mettre à Jour Ses Dépôt Git

Si vous êtes un peu comme moi, vous jonglez avec des dizaines de dépôts git. Ceux auxquels je participe se limitent à une vingtaine environ mais j’ai des dizaines de clones que je consulte à titre d’intérêt, comme ceux du noyau Linux, NetBSD ou autre Awesome WM. Bref, à ce jour, j’ai environ 21G de code source provenant de différents dépôts git sur mon laptop…

Évidemment, j’aime bien les tenir à jour. Donc, afin de me faciliter la tâche, j’ai écrit un simple script shell que j’ai placé à la racine du dossier contenant tous les clones de dépôt git. Il se charge de trouver tous les dossiers de dépôt git et d’y effectuer un git pull.

Le script est tout simple mais bon, comme ça peut éventuellement en arranger d’autres, je partage. ;–)

1
2
3
4
5
6
#!/bin/sh

for d in $(find . -type d -name ".git" | sed 's/\/.git\+$//' ); do
    echo "Current repository: $d";
    cd $d && git pull && cd - || exit 1
done

Si vous savez que vos clones ne se trouvent pas trop loin dans votre arborescence, vous pouvez limiter la recherche en profondeur du find via l’option maxdepth. Par exemple, pour limiter la recherche de dépôts git à une profondeur de 2, il faut modifier le script ainsi:

1
2
3
4
5
6
#!/bin/sh

for d in $(find . -maxdepth 2 -type d -name ".git" | sed 's/\/.git\+$//' ); do
    echo "Current repository: $d";
    cd $d && git pull && cd - || exit 1
done

Bien évidemment, ce script s’arrête s’il rencontre une erreur lors d’un pull sur un dépôt donc vous pouvez l’utiliser sans craintes.

Il va sans dire qu’une légère modification permet de l’utiliser pour d’autres types de dépôts. Par exemple, il suffit de remplacer “.git” par “.hg” et le git pull par un hg pull -u pour qu’il fonctionne avec les dépôts mercurial.

EDIT: Un lecteur m’a très justement fait remarquer qu’il existait la variable d’environnement $OLDPWD, accessible par l’alias -. J’ai donc simplifié le script en conséquence. Merci à lui.