Anstatt zu tun:
git push origin --all && git push nodester --all && git push duostack --all
Gibt es eine Möglichkeit, dies mit nur einem Befehl zu tun?
Vielen Dank :)
Anstatt zu tun:
git push origin --all && git push nodester --all && git push duostack --all
Gibt es eine Möglichkeit, dies mit nur einem Befehl zu tun?
Vielen Dank :)
Antworten:
git remote | xargs -L1 git push --all
Ersetzen Sie ihn master
durch den Zweig, den Sie verschieben möchten.
git remote | xargs -L1 -I R git push R master
git config --global alias.pushall '!git remote | xargs -L1 git push --all'
Durch das Ausführen git pushall
werden nun alle Zweige zu allen Fernbedienungen verschoben.
xargs: illegal option -- l
auf OSX. Ich habe es herausgefunden, du brauchstgit remote | xargs -L1 git push
man xargs
heißt es , dass die Option -l
veraltet ist, da sie nicht in der POISX-Spezifikation enthalten ist.
!
bedeutet Folgendes, dass es sich nicht um einen internen Git-Befehl handelt, sondern um einen externen Shell-Befehl.
Erstellen Sie eine all
Fernbedienung mit mehreren Repo-URLs zu ihrem Namen:
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
Dann einfach git push all --all
.
So sieht es aus .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
direkt nach einem solchen Push laufen .
all
Fernbedienung neue URLs hinzufügen müssen, sobald diese verfügbar sind, während git remote | xargs -L1 git push --all
neue Fernbedienungen automatisch abgerufen werden.
all
Wenn Sie beim Senden eines Commits keine Eingabe benötigen, verwenden Sie einfach "origin" anstelle von "all":git remote set-url --add origin nodester-host:path/proj.git
git push
nicht alle URLs aktualisiert werden. Antwort entsprechend aktualisiert
Wenn Sie immer auf repo1, repo2 und repo3 pushen möchten, aber immer nur auf repo1 ziehen möchten, richten Sie den Remote-Ursprung als ein
[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/*
In der Befehlszeile konfigurieren:
$ 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
Wenn Sie nur von einem bestimmten Zweig ziehen, repo1
aber zu repo1
und repo2
für einen bestimmten ZweigspecialBranch
drücken möchten :
[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
...
Siehe https://git-scm.com/docs/git-config#git-config-branchltnamegtremote .
git push
ohne Argumente arbeiten können.
Als CLI-Alternative zum Bearbeiten der .git / config-Datei können Sie die folgenden Befehle verwenden:
# 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
Das gleiche git push all --all
funktioniert auch hier.
Sie haben das Gleiche wie Antwort 1 erreicht. Sie haben es gerade mit der Befehlszeile gemacht, anstatt die Konfigurationsdatei roh zu bearbeiten.
Ich habe eine kurze Bash-Funktion geschrieben, um in einem Aufruf auf viele Fernbedienungen zuzugreifen. Sie können eine einzelne Fernbedienung als Parameter angeben, mehrere Fernbedienungen durch Leerzeichen getrennt oder keine angeben, damit sie auf alle Fernbedienungen übertragen wird.
Dies kann zu Ihrem .bashrc- oder .bash_profile hinzugefügt werden.
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
}
Beispiel: Angenommen, Ihr Repo verfügt über 3 Fernbedienungen: rem1, rem2 und rem3.
# Pushes to rem1
GitPush rem1
# Pushes to rem1 and rem2
GitPush rem1 rem2
# Pushes to rem1, rem2 and rem3
GitPush
Sie können Git-Hooks verwenden - insbesondere pre-push
: Fügen Sie Pushs hinzu, die keinen Ursprung haben .git/hooks/pre-push
.