Solution très bonne et simple. BTW vous pouvez utiliser xargs -l au lieu de -L 1, l'option -l est la même que -L 1. Aussi, parfois j'ajoute --all à la poussée git. git remote | xargs -l git push --all
Tony
2
Je xargs: illegal option -- lmonte sur OSX. git remote | xargs -L1 git push
Compris
4
Git vous permet de faire cet appel dans une commande personnalisée. Il suffit de le mettre dans un fichier 1) sur votre chemin, 2) vous avez des autorisations d'exécution pour, et 3) appelé "git- [nom personnalisé]" (par exemple git-foo, git-push-all) et vous aurez être capable de taper simplement "git [nom personnalisé]" (par exemple git foo, git push-all).
Andrew Martin
2
@Tony Sur Ubuntu, man xargsdit que l'option -lest déconseillée car elle n'est pas dans la spécification POISX.
wjandrea
2
@kyb Dans la syntaxe d'alias git, !signifie que ce qui suit n'est pas une commande git interne, mais une commande shell externe.
faible
285
Créez une alltélécommande avec plusieurs URL de référentiel à son nom:
git remote add all origin-host:path/proj.git
git remote set-url --add all nodester-host:path/proj.git
git remote set-url --add all duostack-host:path/proj.git
Truc super cool! Le seul inconvénient est qu'il ne déplace pas les têtes distantes. Vous devez courir git fetch --alljuste après avoir fait une telle poussée.
madhead
8
M. Torvalds (créateur de Git) mentionne qu'il utilise cette méthode, mais il déclare que c'est simplement pour des raisons de commodité et n'offre aucun avantage technique marc.info/?l=git&m=116231242118202&w=2 "Et au final, même un" git push all "qui pousse vers plusieurs référentiels finira en fait par se connecter une fois pour chaque référentiel, donc c'est vraiment juste un raccourci pour faire plusieurs" git push "es. Il n'y a pas de réel avantage technique, juste une commodité."
Matt
14
Un problème avec cette approche est que vous devez ajouter de nouvelles URL à la alltélécommande à mesure qu'elles deviennent disponibles, tandis que vous git remote | xargs -L1 git push --allrécupérerez automatiquement toutes les nouvelles télécommandes.
Raffi Khatchadourian
2
Astuce: pour ne pas avoir besoin de taper allchaque fois que vous envoyez un commit, utilisez simplement "origin" au lieu de "all":git remote set-url --add origin nodester-host:path/proj.git
Macabeus
J'ai oublié de définir les URL de push sinon la git pushmise à jour de toutes les URL ne sera pas effectuée. réponse mise à jour en conséquence
user3338098
88
Si vous voulez toujours pousser vers repo1, repo2 et repo3 mais toujours tirer uniquement depuis repo1, configurez la source d'origine comme
Je ne sais pas pourquoi cela n'a pas obtenu plus de votes. C'est vraiment très pratique car cela vous permet de faire un git pushsans aucun argument.
Husky
1
Votez pour moi, s'il vous plaît!
Meng Lu
1
Cela me semble une façon plus appropriée de procéder. Aurait dû avoir les votes les plus élevés.
Ahmad
C'est très utile. Est-il possible de limiter pushurl à la branche maître uniquement?
fbucek
17
Comme alternative CLI à la modification du fichier .git / config, vous pouvez utiliser les commandes suivantes:
# git remote add all origin-host:path/proj.git
# git remote set-url --add all nodester-host:path/proj.git
# git remote set-url --add all duostack-host:path/proj.git
La même chose git push all --allfonctionne ici aussi.
Vous avez accompli la même chose que la réponse n ° 1. Vous venez de le faire avec la ligne de commande au lieu de modifier brutalement le fichier de configuration.
J'ai écrit une fonction bash courte pour pousser vers de nombreuses télécommandes en un seul appel. Vous pouvez spécifier une seule télécommande comme paramètre, plusieurs télécommandes séparées par des espaces ou n'en spécifier aucune pour la pousser vers toutes les télécommandes.
Cela peut être ajouté à votre .bashrc ou .bash_profile.
function GitPush {
REMOTES=$@
# If no remotes were passed in, push to all remotes.
if [[ -z "$REMOTES" ]]; then
REM=`git remote`
# Break the remotes into an array
REMOTES=$(echo $REM | tr " " "\n")
fi
# Iterate through the array, pushing to each remote
for R in $REMOTES; do
echo "Pushing to $R..."
git push $R
done
}
Exemple: Supposons que votre dépôt ait 3 télécommandes: rem1, rem2 et rem3.
# Pushes to rem1
GitPush rem1
# Pushes to rem1 and rem2
GitPush rem1 rem2
# Pushes to rem1, rem2 and rem3
GitPush
all
télécommande pour appuyer sur toutes vos télécommandes, voir: stackoverflow.com/a/18637593/802365Réponses:
Pour pousser toutes les branches vers toutes les télécommandes:
Ou si vous souhaitez pousser une branche spécifique vers toutes les télécommandes:
Remplacez
master
par la branche que vous souhaitez pousser.(Bonus) Pour créer un alias git pour la commande:
La course
git pushall
va maintenant pousser toutes les branches vers toutes les télécommandes.la source
xargs: illegal option -- l
monte sur OSX.git remote | xargs -L1 git push
man xargs
dit que l'option-l
est déconseillée car elle n'est pas dans la spécification POISX.!
signifie que ce qui suit n'est pas une commande git interne, mais une commande shell externe.Créez une
all
télécommande avec plusieurs URL de référentiel à son nom:Alors juste
git push all --all
.Voici à quoi cela ressemble
.git/config
:la source
git fetch --all
juste après avoir fait une telle poussée.all
télécommande à mesure qu'elles deviennent disponibles, tandis que vousgit remote | xargs -L1 git push --all
récupérerez automatiquement toutes les nouvelles télécommandes.all
chaque fois que vous envoyez un commit, utilisez simplement "origin" au lieu de "all":git remote set-url --add origin nodester-host:path/proj.git
git push
mise à jour de toutes les URL ne sera pas effectuée. réponse mise à jour en conséquenceSi vous voulez toujours pousser vers repo1, repo2 et repo3 mais toujours tirer uniquement depuis repo1, configurez la source d'origine comme
Configurer en ligne de commande:
Si vous souhaitez uniquement extraire
repo1
mais pousser versrepo1
etrepo2
pour une branche spécifiquespecialBranch
:Voir https://git-scm.com/docs/git-config#git-config-branchltnamegtremote .
la source
git push
sans aucun argument.Comme alternative CLI à la modification du fichier .git / config, vous pouvez utiliser les commandes suivantes:
La même chose
git push all --all
fonctionne ici aussi.Vous avez accompli la même chose que la réponse n ° 1. Vous venez de le faire avec la ligne de commande au lieu de modifier brutalement le fichier de configuration.
la source
J'ai écrit une fonction bash courte pour pousser vers de nombreuses télécommandes en un seul appel. Vous pouvez spécifier une seule télécommande comme paramètre, plusieurs télécommandes séparées par des espaces ou n'en spécifier aucune pour la pousser vers toutes les télécommandes.
Cela peut être ajouté à votre .bashrc ou .bash_profile.
Exemple: Supposons que votre dépôt ait 3 télécommandes: rem1, rem2 et rem3.
la source
Vous pouvez utiliser des hooks git - en particulier
pre-push
: ajoutez des push non d'origine à.git/hooks/pre-push
.la source