web-dev-qa-db-fra.com

git Push à plusieurs référentiels simultanément

Comment puis-je faire en sorte que git Push transmette non seulement à Origin mais également à un autre référentiel distant?

comme git Push n'est qu'un alias pour git Push Origin, puis-je alias git Push to Push vers deux référentiels distants à la fois (avec une seule commande)?

Je ne cherche pas de script non-git ici, mais j'aimerais l’installer pour mon référentiel local dans git.

Quand j'ai essayé avec des scripts post-Push, j'ai échoué.

78
Kissaki

Je ne pense pas que vous puissiez le faire simplement en définissant un drapeau sur git, mais vous pouvez modifier un fichier de configuration qui vous permettra de transmettre à plusieurs référentiels distants sans les saisir manuellement pas après)

Dans le fichier .git/config, vous pouvez ajouter plusieurs URL à une télécommande 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 appuyez sur toutes les URL distantes.

123
g19fanatic

Aucune édition manuelle

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

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

Totalement automatique

Si vous êtes super fainéant et ne supportez pas de copier/coller l'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 (testez $name et $method), mais awk est gentil et il y a de l'amour pour tout le monde.

Pousser

Ensuite, vous pouvez appuyer sur toutes les télécommandes avec

git Push all

Références

54
Édouard Lopez

Vous pouvez également obtenir l'URL à partir de 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.

0