
Zorzella
Das kurze: Gibt es eine Möglichkeit, ein Git-Repo in eine Liste von Remote-Repos zu pushen und daraus zu ziehen (anstelle eines einzelnen “Ursprungs”)?
Das lange: Ich habe oft eine Situation, in der ich eine App auf mehreren Computern mit unterschiedlicher Konnektivität entwickle – sagen wir, ein Laptop während der Fahrt, ein Computer „A“, während ich an einem bestimmten Ort bin, und ein weiterer Computer „B“, während ich an einem anderen bin . Außerdem hat der Laptop möglicherweise nur Konnektivität mit entweder “A” oder “B” und manchmal mit beiden.
Was ich gerne hätte, ist, dass Git immer von allen Computern “pullt” und “pusht”, mit denen es sich derzeit verbinden kann, damit es einfacher ist, von einer Maschine zur anderen zu springen und nahtlos weiterzuarbeiten.

ELLIOTTKABEL
Eine manuelle Durchführung ist nicht mehr erforderlichmit modernen Versionen von git
! Sehen Malvine‘s Lösung, unten.
Hier wiedergegeben:
git remote set-url origin --push --add <a remote>
git remote set-url origin --push --add <another remote>
Ursprüngliche Antwort:
Dieses Etwas verwende ich schon seit einiger Zeit ohne schlimme Folgen und wurde von Linus Torvalds auf der vorgeschlagen Git-Mailingliste.
araqnidDie Lösung von ist die richtige, um Code zu bringen hinein Ihr Repository … aber wenn Sie, wie ich, mehrere gleichwertige maßgebliche Upstreams haben (ich halte einige meiner wichtigeren Projekte sowohl auf einen privaten Upstream, GitHub als auch auf Codaset geklont), kann es mühsam sein, Änderungen an jedem einzelnen vorzunehmen Tag.
Um es kurz zu machen, git remote add
alle Ihre Fernbedienungen einzeln … und dann git config -e
und fügen Sie eine zusammengeführte Fernbedienung hinzu. Angenommen, Sie haben dieses Repository config
:
[remote "GitHub"]
url = git@github.com:elliottcable/Paws.o.git
fetch = +refs/heads/*:refs/remotes/GitHub/*
[branch "Master"]
remote = GitHub
merge = refs/heads/Master
[remote "Codaset"]
url = git@codaset.com:elliottcable/paws-o.git
fetch = +refs/heads/*:refs/remotes/Codaset/*
[remote "Paws"]
url = git@github.com:Paws/Paws.o.git
fetch = +refs/heads/*:refs/remotes/Paws/*
… um eine zusammengeführte Fernbedienung für zu erstellen "Paws"
und "Codaset"
kann ich nach all dem Folgendes hinzufügen:
[remote "Origin"]
url = git@github.com:Paws/Paws.o.git
url = git@codaset.com:elliottcable/paws-o.git
Sobald ich das getan habe, wenn ich git push Origin Master
wird es auf beide drücken Paws/Master
und Codaset/Master
nacheinander, um das Leben ein wenig einfacher zu machen.

araqnid
Sie können mehrere Remote-Repositories mit konfigurieren git remote
Befehl:
git remote add alt alt-machine:/path/to/repo
Von allen konfigurierten Remotes abrufen und Tracking-Zweige aktualisieren, aber nicht zusammenführen HEAD
tun:
git remote update
Wenn es derzeit nicht mit einer der Fernbedienungen verbunden ist, dauert es eine Weile oder es wird ein Fehler ausgegeben und es wird mit dem nächsten fortgefahren. Sie müssen die abgerufenen Repositories manuell zusammenführen oder cherry-pick
je nachdem, wie Sie das Sammeln von Änderungen organisieren möchten.
Um den Master-Zweig von alt abzurufen und in Ihren aktuellen Kopf zu ziehen, tun Sie Folgendes:
git pull alt master
Also tatsächlich git pull
ist fast eine Abkürzung für git pull origin HEAD
(Eigentlich sieht es in der Konfigurationsdatei aus, um dies festzustellen, aber Sie bekommen die Idee).
Um Updates zu pushen, müssen Sie dies für jedes Repo manuell tun.
Ein Push wurde meiner Meinung nach mit Blick auf den zentralen Repository-Workflow entwickelt.

Malvine
Seit git 1.8 (Oktober 2012) können Sie dies über die Befehlszeile tun:
git remote set-url origin --push --add user1@repo1
git remote set-url origin --push --add user2@repo2
git remote -v
Dann git push
pusht zu user1@repo1 und dann zu user2@repo2.
Ich habe diese Aliase zu meiner ~/.bashrc hinzugefügt:
alias pushall="for i in `git remote`; do git push $i; done;"
alias pullall="for i in `git remote`; do git pull $i; done;"

FelipeC
Sie können Fernbedienungen hinzufügen mit:
git remote add a urla
git remote add b urlb
Um dann alle Repos zu aktualisieren, tun Sie Folgendes:
git remote update

Troex
Hier ist mein Beispiel mit Bash-Skript drin .gitconfig
Alias-Bereich
[alias]
pushall = "!f(){ for i in `git remote`; do git push $i; done; };f"
Diese Antwort unterscheidet sich von den vorherigen Antworten, weil es vermeidet die unnötige und asymmetrische Verwendung der --push
Möglichkeit in dem set-url
Befehl von git-Fernbedienung. Auf diese Weise sind beide URLs symmetrisch in ihrer Konfiguration. Für Skeptiker ist die Git-Konfiguration wie gezeigt von cat ./.git/config
sieht anders aus mit gegen ohne diese Option.
- Von der ersten URL klonen:
git clone git@github.com:myuser/myrepo.git
- Überprüfen Sie die aktuelle Fernbedienung:
$ git remote -v
origin git@github.com:myuser/myrepo.git (fetch)
origin git@github.com:myuser/myrepo.git (push)
- Fügen Sie die zweite Fernbedienung hinzu:
git remote set-url --add origin git@gitlab.com:myuser/myrepo.git
- Vergewissern Sie sich, dass beide Fernbedienungen aufgelistet sind
push
:
$ git remote -v
origin git@github.com:myuser/myrepo.git (fetch)
origin git@github.com:myuser/myrepo.git (push)
origin git@gitlab.com:myuser/myrepo.git (push)
$ git config --local --get-regexp ^remote\..+\.url$
remote.origin.url git@github.com:myuser/myrepo.git
remote.origin.url git@gitlab.com:myuser/myrepo.git
- An alle URLs nacheinander pushen:
git push
So löschen Sie eine Fernbedienung:
git remote set-url --delete origin git@gitlab.com:myuser/myrepo.git
9869400cookie-checkWie kann ich von mehreren entfernten Standorten ziehen/drücken?yes
Hinweis für Neubesucher, Stand 2016: Der derzeit richtige Weg, sanktioniert durch First-Class
git
Features, ist in der Antwort von Malvineous unten enthalten. Die akzeptierte Antwort ist falsch.– ELLIOTTKABEL
15. August 2016 um 1:13 Uhr
Ich fand die hier gegebene Antwort sehr gut detailliert und zusammengefasst
– Gangula
11. Januar um 18:27 Uhr