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 masterdurch 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 pushallwerden nun alle Zweige zu allen Fernbedienungen verschoben.
xargs: illegal option -- lauf OSX. Ich habe es herausgefunden, du brauchstgit remote | xargs -L1 git push
man xargsheißt es , dass die Option -lveraltet 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 allFernbedienung 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 --alldirekt nach einem solchen Push laufen .
allFernbedienung neue URLs hinzufügen müssen, sobald diese verfügbar sind, während git remote | xargs -L1 git push --allneue Fernbedienungen automatisch abgerufen werden.
allWenn 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 pushnicht 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, repo1aber zu repo1und 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 pushohne 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 --allfunktioniert 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.