564 votes

Git - Pousser le code à deux télécommandes

J'ai deux référentiels git distants. origin et github

Je pousse ma branche devel dans les deux référentiels.

 git push -u origin devel
git push -u github devel
 

Mais alors, quand je le fais. git push Il ne serait que poussé à github .

Est-ce que je peux configurer mes deux télécommandes de manière à pouvoir transférer les modifications vers les deux référentiels avec une seule commande?

910voto

jweyrich Points 10002

Dans les dernières versions de Git que vous pouvez ajouter plusieurs pushurls pour une distance. Utilisez la commande suivante pour ajouter deux pushurls à votre origin:

git remote set-url --add --push origin git://another/repo.git
git remote set-url --add --push origin git://one_more/repo.git

Ainsi, lorsque vous poussez à l' origin, il va le pousser à les deux référentiels.

Mise à JOUR 1: Git 1.8.0.1 et 1.8.1 (et peut-être d'autres versions) semblent avoir un bug qui provoque --add , afin de remplacer l'URL d'origine de la première utilisation, vous devez ajouter l'URL d'origine à l'aide de la même commande. Faire git remote -v doit faire l'Url pour chaque distance.

Mise à JOUR 2: Junio C. Hamano, le Git responsable, il a expliqué comment il a été conçu. Faire git remote set-url --add --push <remote_name> <url> ajoute un pushurl pour une distance, qui remplace l'URL par défaut pour la pousse. Cependant, vous pouvez ajouter plusieurs pushurls pour une télécommande, ce qui vous permet ensuite de pousser à de multiples télécommandes à l'aide d'un seul git push. Vous pouvez vérifier ce comportement ci-dessous:

$ git clone git://original/repo.git
$ git remote -v
origin  git://original/repo.git (fetch)
origin  git://original/repo.git (push)
$ git config -l | grep '^remote\.origin'
remote.origin.url=git://original/repo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

Maintenant, nous allons ajouter un pushurl:

$ git remote set-url --add --push origin git://another/repo.git
$ git remote -v
origin  git://original/repo.git (fetch) <-- **UNCHANGED**
origin  git://another/repo.git (push) <-- **CHANGED**
$ git config -l | grep '^remote\.origin'
remote.origin.url=git://original/repo.git <-- **UNCHANGED**
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.pushurl=git://another/repo.git <-- **ADDED**

Ici, git remote -v montre le nouveau pushurl pour le push, donc si vous ne git push, il va pousser à l' git://another/repo.git seulement. Cela montre à quel pushurl remplace l'url par défaut (à distance.de l'origine.l'url).

Maintenant, nous allons ajouter un nouveau pushurl et vérifier de nouveau:

$ git remote set-url --add --push origin git://one_more/repo.git
$ git remote -v
origin  git://original/repo.git (fetch) <-- **UNCHANGED**
origin  git://another/repo.git (push) <-- **UNCHANGED**
origin  git://one_more/repo.git (push) <-- **ADDED**
$ git config -l | grep '^remote\.origin'
remote.origin.url=git://original/repo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.pushurl=git://another/repo.git <-- **UNCHANGED**
remote.origin.pushurl=git://one_more/repo.git <-- **ADDED**

Vous voyez les deux pushurls, nous avons ajouté sont conservés. Maintenant, un seul git push poussera à la fois git://another/repo.git et git://one_more/repo.git.

110voto

Pour envoyer les deux commandes à distance avec une seule commande, vous pouvez créer un alias:

 git config alias.pushall '!git push origin devel && git push github devel'
 

Avec cela, lorsque vous utilisez la commande git pushall , les deux référentiels seront mis à jour.

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