Exécuter une commande Git sur plusieurs répoet aussi connaitre leur status

Cela m'arrive très fréquemment, je modifie plusieurs répo dans le dossier « vendor » et je ne commite pas mes changements tout de suite, quelques jours passent et je dois regarder qui a été modifié, et c'est fastidieux puisque je dois aller dans chaque répo et taper « git status ». J'ai cherché sur internet une solution qui me permettrait de connaître les dépôts modifiés depuis le dossier « vendor » mais je n'ai rien trouvé de satisfaisant, alors voici ma solution. Il s'agit de deux commandes bash, à ajouter quelques part dans sa config, je l'ai mis directement dans « ~/.bashrc »:

function git-all () {
    for gitdir in `find . -type d -name .git`;
    do
        worktree=${gitdir%/*};
        echo $worktree
        git --git-dir $gitdir --work-tree $worktree $1
    done
}

function git-all-status () {
    git-all "status --short $1"
}

Connaitre le status de plusieurs répo Git

La commande git-all-status permet de connaitre le status des répo Git qui se trouvent dans le dossier courant. Par défaut la commande affiche un status court. Voici un exemple de sortie, normalement c'est plus joli et en couleurs:

./ircmaxell/password-compat
./brickrouge/brickrouge
 M Makefile
 M assets/brickrouge-responsive.css
 M assets/brickrouge.css
 M assets/brickrouge.js
 M lib/carousel.js
 M lib/mixins.less
./brickrouge/css-class-names
./psr/log
./icanboogie-modules/images
 M Makefile
 M lib/elements/image-control-with-preview.css
 M lib/elements/image-control-with-preview.js
 M public/module.css
 M public/module.js
?? tests/ThumbnailOperation.php
./icanboogie-modules/seo
./icanboogie-modules/users.noncelogin
./icanboogie-modules/sites
./icanboogie-modules/registry
./icanboogie-modules/news
 M views/list.html
./icanboogie-modules/dashboard
./icanboogie-modules/modules
./icanboogie-modules/images.albums
./icanboogie-modules/users
./icanboogie-modules/nodes
 M lib/views/view.php
?? lib/activerecords/criteria/

Pour obtenir un status détaillé on tapera git-all-status --long.

Exécuter une commande Git sur plusieurs répo

La commande git-all permet d'exécuter une commande Git sur plusieurs répo. Par exemple, pour exécuter une commande similaire à git-all-status on saisira la commande suivante :

$ git-all "status --short"

Conclusion

La commande git-all permet d'exécuter toute les commandes Git que l'on veut sur tous les répo Git disponibles depuis le dossier courant. La commande git-all-status permet de connaitre leur status. J'espère qu'elles vous seront aussi utiles qu'à moi.

Laisser un commentaire

Pas de commentaire