Invece di fare:
git push origin --all && git push nodester --all && git push duostack --all
C'è un modo per farlo con un solo comando?
Grazie :)
all
telecomando per inviare tutti i telecomandi, consultare: stackoverflow.com/a/18637593/802365
Invece di fare:
git push origin --all && git push nodester --all && git push duostack --all
C'è un modo per farlo con un solo comando?
Grazie :)
all
telecomando per inviare tutti i telecomandi, consultare: stackoverflow.com/a/18637593/802365
Risposte:
git remote | xargs -L1 git push --all
Sostituisci master
con il ramo che vuoi spingere.
git remote | xargs -L1 -I R git push R master
git config --global alias.pushall '!git remote | xargs -L1 git push --all'
La corsa git pushall
ora spingerà tutti i rami verso tutti i telecomandi.
xargs: illegal option -- l
su OSX. git remote | xargs -L1 git push
man xargs
dice che l'opzione -l
è obsoleta poiché non è nelle specifiche POISX.
!
significa che quanto segue non è un comando git interno, ma un comando shell esterno.
Crea un all
telecomando con diversi URL repo al suo nome:
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
Quindi basta git push all --all
.
Ecco come appare .git/config
:
[remote "all"]
url = origin-host:path/proj.git
url = nodester-host:path/proj.git
url = duostack-host:path/proj.git
git fetch --all
subito dopo aver fatto una tale spinta.
all
telecomando non appena saranno disponibili, mentre git remote | xargs -L1 git push --all
raccoglierà automaticamente tutti i nuovi telecomandi.
all
ogni volta che si invia un commit, basta usare "origin" invece di "all":git remote set-url --add origin nodester-host:path/proj.git
git push
non aggiornerà tutti gli URL. risposta aggiornata di conseguenza
Se si desidera premere sempre repo1, repo2 e repo3 ma estrarre sempre solo da repo1, impostare 'origine' remota come
[remote "origin"]
url = https://exampleuser@example.com/path/to/repo1
pushurl = https://exampleuser@example.com/path/to/repo1
pushurl = https://exampleuser@example.com/path/to/repo2
pushurl = https://exampleuser@example.com/path/to/repo3
fetch = +refs/heads/*:refs/remotes/origin/*
Configurare dalla riga di comando:
$ git remote add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo2
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo3
Se vuoi solo estrarre repo1
ma spingere verso repo1
e repo2
per un ramo specificospecialBranch
:
[remote "origin"]
url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
fetch = +refs/heads/*:refs/remotes/origin/*
...
[remote "specialRemote"]
url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo2.git
fetch = +refs/heads/*:refs/remotes/origin/*
...
[branch "specialBranch"]
remote = origin
pushRemote = specialRemote
...
Vedi https://git-scm.com/docs/git-config#git-config-branchltnamegtremote .
git push
senza argomenti.
Come alternativa CLI alla modifica del file .git / config, è possibile utilizzare i seguenti comandi:
# 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
Lo stesso git push all --all
funziona anche qui.
Hai ottenuto lo stesso risultato della risposta n. 1. L'hai appena fatto con la riga di comando invece della modifica grezza del file di configurazione.
Ho scritto una breve funzione bash per inviare a molti telecomandi in una chiamata. È possibile specificare un singolo telecomando come parametro, più telecomandi separati da spazi o non specificare alcuno per farlo spingere su tutti i telecomandi.
Questo può essere aggiunto al tuo .bashrc o .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
}
Esempio: supponiamo che il tuo repository abbia 3 telecomandi: rem1, rem2 e rem3.
# Pushes to rem1
GitPush rem1
# Pushes to rem1 and rem2
GitPush rem1 rem2
# Pushes to rem1, rem2 and rem3
GitPush
Puoi usare git hook , in particolare pre-push
: aggiungi push non di origine a .git/hooks/pre-push
.