it-swarm.com.de

git Push auf mehrere Repositorys gleichzeitig

Wie kann ich git Push zum Push nicht nur in Origin, sondern auch zu einem anderen Remote-Repository machen?

da git Push nur ein Alias ​​für git Push Origin ist, kann ich als Push-to-Push-Push auf 2 entfernte Repositorys gleichzeitig git (mit nur diesem Befehl)?

Ich bin nicht auf der Suche nach einem Skript, das kein Git ist, aber ich möchte es für mein lokales Repository in git einrichten.

Als ich es mit Post-Push-Skripten versuchte, schlug ich fehl.

78
Kissaki

Ich glaube nicht, dass Sie dies tun können, indem Sie ein Flag für git setzen. Sie können jedoch eine Konfigurationsdatei ändern, die es Ihnen ermöglicht, auf mehrere Remote-Repositorys zu drücken, ohne sie alle manuell eingeben zu müssen nicht danach)

In der Datei .git/config können Sie einer definierten Remote mehrere URLs hinzufügen:

[remote "all"]
    url=ssh://[email protected]/repos/g0.git
    url=ssh://[email protected]/repos/g1.git

Wenn Sie jetzt git Push all sind, drücken Sie auf alle Remote-URLs.

123
g19fanatic

Keine manuelle Bearbeitung

Sie können einem entfernten Zweig (z. B. all) mehrere URLs direkt über die Befehlszeile hinzufügen, indem Sie git config --add remote.xyz.url mit einer anderen URL verwenden:

git config --add remote.all.url ssh://[email protected]/repos/g0.git
git config --add remote.all.url ssh://[email protected]/repos/g1.git

Komplett automatisch

Wenn Sie super lazy sind und die URL/URL nicht mehrmals kopieren möchten, ist dies für Sie:

function git-add-Push-all() {
  while read -r name url method; do
    git config --add remote.all.url "$url"
  done < <(git remote -v | awk '!/^all/ && /Push/')
}

git-add-Push-all # from git (sub)directory

Ein komplettes Basy-Skript ist möglich (test $name und $method), aber awk ist süß und es gibt Liebe für alle.

Drücken

Dann können Sie mit allen Remote-Tasten drücken

git Push all

Verweise

54
Édouard Lopez

Sie können auch URLs von konfigurierten Fernbedienungen erhalten:

for repo in g0 g1 ...
do
    git config --add remote.all.url `git config remote.$repo.url`
done

dabei sind g0, g1, ... die Namen Ihrer Fernbedienungen.