91 votes

git push vers plusieurs dépôts simultanément

Comment puis-je faire git push pour pousser non seulement à origin mais aussi un autre référentiel distant ?

comme git push n'est qu'un alias pour git push origin puis-je aliaser git push pour pousser vers 2 dépôts distants à la fois (avec cette seule commande) ?

Je ne cherche pas un script non-git ici mais j'aimerais configurer cela pour mon dépôt local dans git.

Quand j'ai essayé avec le post-push scripts j'ai échoué.

147voto

g19fanatic Points 3506

Je ne pense pas qu'il soit possible de le faire simplement en définissant un drapeau dans git, mais vous pouvez modifier un fichier de configuration qui vous permettra de pousser vers plusieurs dépôts distants sans avoir à les saisir manuellement (enfin, seulement la première fois et pas après).

Dans le .git/config vous pouvez ajouter plusieurs urls à une distance définie :

[remote "all"]
    url=ssh://user@server/repos/g0.git
    url=ssh://user@server/repos/g1.git

Si vous git push all maintenant vous poussez vers toutes les urls distantes.

64voto

Édouard Lopez Points 2762

Pas d'édition manuelle

Vous pouvez ajouter plusieurs URL à une branche distante (par ex. all ) directement à partir de la ligne de commande en utilisant git config --add remote.xyz.url avec des URL différentes :

git config --add remote.all.url ssh://user@server/repos/g0.git
git config --add remote.all.url ssh://user@server/repos/g1.git

Entièrement automatique

Si vous êtes super paresseux et ne veulent pas copier/coller les URL plusieurs fois, ceci est pour vous :

function git-add-push-all() {
  while read -r name url method; do
    git config --add remote.all.url "$url"
  done < <(git remote -v | awk '!/^all/ && /push/')
}

git-add-push-all # from git (sub)directory

Un script bashy complet est possible (test $name et $method ), mais awk est doux et il y a de l'amour pour tout le monde.

Pousser

Ensuite, vous pouvez pousser vers tous les distants avec

git push all

Références

0voto

Vous pouvez également obtenir l'url des télécommandes configurées :

for repo in g0 g1 ...
do
    git config --add remote.all.url `git config remote.$repo.url`
done

où g0, g1, ... sont les noms de vos télécommandes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X