Das kurze: Gibt es eine Möglichkeit, ein Git-Repo auf eine Liste von Remote-Repos zu schieben und von dieser zu ziehen (anstatt auf einen einzelnen "Ursprung")?
Das lange: Ich habe oft eine Situation, in der ich eine App auf mehreren Computern mit unterschiedlicher Konnektivität entwickle - beispielsweise einen Laptop während der Übertragung, einen Computer "A" an einem bestimmten Ort und einen anderen Computer "B". während auf einem anderen. Außerdem kann der Laptop nur mit "A" oder "B" und manchmal mit beiden verbunden sein.
Was ich möchte, ist, dass git immer von allen Computern "zieht" und "pusht", auf die es derzeit eine Verbindung herstellen kann, damit es einfacher ist, von einem Computer zum anderen zu springen und nahtlos weiterzuarbeiten.
git
Funktionen, ist in enthalten malvineous ‚s Antwort unten . Die akzeptierte Antwort ist falsch.Antworten:
Sie können mehrere Remote-Repositorys mit dem folgenden
git remote
Befehl konfigurieren :Gehen Sie folgendermaßen vor, um von allen konfigurierten Fernbedienungen abzurufen und Tracking-Zweige zu aktualisieren, aber nicht zusammenzuführen
HEAD
:Wenn es derzeit nicht mit einer der Fernbedienungen verbunden ist, dauert es eine Weile oder es wird ein Fehler ausgegeben und mit der nächsten fortgefahren. Sie müssen manuell aus den abgerufenen Repositorys zusammenführen oder
cherry-pick
, je nachdem, wie Sie das Sammeln von Änderungen organisieren möchten.Gehen Sie wie folgt vor, um den Hauptzweig von alt abzurufen und in Ihren aktuellen Kopf zu ziehen:
Also in der Tat
git pull
ist fast Abkürzung fürgit pull origin HEAD
(eigentlich sieht es in der Konfigurationsdatei, um dies zu bestimmen, aber Sie bekommen die Idee).Um Updates zu pushen, müssen Sie dies für jedes Repo manuell tun.
Ich denke, ein Push wurde unter Berücksichtigung des Workflows des zentralen Repositorys entwickelt.
quelle
Dies manuell zu tun ist bei modernen Versionen von nicht mehr erforderlich
git
! Siehe Malvineous 'Lösung unten.Hier wiedergegeben:
Ursprüngliche Antwort:
Dies ist etwas, das ich seit einiger Zeit ohne schlimme Konsequenzen benutze und das Linus Torvalds auf der Git-Mailingliste vorgeschlagen hat .
Die Lösung von araqnid ist die richtige, um Code in Ihr Repository zu bringen. Wenn Sie jedoch wie ich mehrere gleichwertige autorisierende Upstreams haben (ich behalte einige meiner kritischeren Projekte, die sowohl für einen privaten Upstream als auch für GitHub und Codaset geklont wurden), ist dies der Fall Es kann schmerzhaft sein, jeden Tag Änderungen an jedem einzelnen vorzunehmen.
Lange Rede, kurzer
git remote add
Sinn , alle Ihre Fernbedienungen einzeln… und danngit config -e
und fügen Sie eine zusammengeführte Fernbedienung hinzu. Angenommen, Sie haben dieses Repositoryconfig
:… Um eine zusammengeführte Fernbedienung für
"Paws"
und zu erstellen"Codaset"
, kann ich nach all diesen Folgendes hinzufügen:Sobald ich dies getan habe
git push Origin Master
, wird es nacheinanderPaws/Master
undCodaset/Master
nacheinander gedrückt, was das Leben ein wenig einfacher macht.quelle
git config -e
öffnet die.git/config
Datei in Ihrem bevorzugten Editor.git
die Befehlszeile dies nativ unterstützt, mitgit remote set-url ... --add
.[branch "Master"]
Setremote = Origin
undgit pull
werden beide Fernbedienungen verwendet.Seit Git 1.8 (Oktober 2012) können Sie dies über die Befehlszeile tun:
Dann
git push
wird auf user1 @ repo1 und dann auf user2 @ repo2 gedrückt.quelle
git fetch
. (Angesichts dessen verstehe ich nicht, worauf der Zweck verzichtengit remote set-url --add
kann--push
.)Ich habe diese Aliase zu meinem ~ / .bashrc hinzugefügt:
quelle
git config alias.pushall '!for i in
; do git push $i; done;'
alias pushall='for i in `git remote`; do echo "Pushing to " $i; git push $i; done;'
Sie können Fernbedienungen hinzufügen mit:
Um dann alle Repos zu aktualisieren, gehen Sie wie folgt vor:
quelle
Hier ist mein Beispiel mit Bash-Skript im
.gitconfig
Alias-Bereichquelle
Ich habe dem Remote- "Ursprung" in der .git congfig-Datei zwei separate Pushurl hinzugefügt. Wenn ich laufe
git push origin "branchName"
, läuft es durch und drückt auf jede URL. Ich bin mir nicht sicher, ob es einen einfacheren Weg gibt, dies zu erreichen, aber dies funktioniert für mich, wenn ich gleichzeitig zum Github-Quellcode und zum My.visualStudio-Quellcode pushe.quelle
Ich nahm mir die Freiheit, die Antwort von nona-urbiz zu erweitern; füge dies einfach zu deinem ~ / .bashrc hinzu:
Verwendungszweck:
Wenn Sie kein Verzweigungsargument für git-pullall angeben, schlägt das Abrufen von nicht standardmäßigen Fernbedienungen fehl. habe dieses Verhalten so belassen, wie es ist, da es analog zu git ist.
quelle
Sie benötigen ein Skript, um sie zu durchlaufen. Git bietet kein "Push all". Sie könnten theoretisch einen Push in mehreren Threads ausführen, eine native Methode ist jedoch nicht verfügbar.
Das Abrufen ist noch komplizierter, und ich würde empfehlen, dies linear zu tun.
Ich denke, Ihre beste Antwort ist, eine Maschine zu haben, an der jeder drückt / zieht, wenn das überhaupt möglich ist.
quelle
Für die Aktualisierung der Fernbedienungen (dh des
pull
Falls) sind die Dinge einfacher geworden.Die Aussage von Linus
in dem referenzierten Eintrag auf der Git-Mailingliste in elliottcables Antwort ist nicht mehr wahr.
git fetch
Ich habe den--all
Parameter irgendwo in der Vergangenheit gelernt , um alle Fernbedienungen auf einmal abrufen zu können.Wenn nicht alle angefordert werden, kann der
--multiple
Schalter verwendet werden, um mehrere Fernbedienungen oder eine Gruppe anzugeben.quelle
Ich wollte in VSO / TFS arbeiten und dann öffentlich auf GitHub pushen, wenn ich fertig bin. Erstes Repo in privatem VSO erstellt. Als es an der Zeit war, GitHub hinzuzufügen, tat ich Folgendes:
Arbeitete wie ein Champion ...
Geben Sie für eine Überprüfung der Integrität "git remote -v" aus, um die einem Projekt zugeordneten Repositorys aufzulisten.
Einfacher Weg, für mich gearbeitet ... Hoffe das hilft jemandem.
quelle
git push -f
ohne Grund, z. B.git push
wenn man nicht weiß oder genau weiß, was man tut, ist eine schlechte Idee und möglicherweise schädlich. Dies beantwortet auch nicht die Frage, sondern wie man eine zweite Fernbedienung hinzufügt.Fügen Sie der globalen gitconfig (/home/user/.gitconfig) mit dem folgenden Befehl einen Alias hinzu.
Sobald Sie Code festschreiben, sagen wir
standardmäßig zum Ursprung pushen. Nach dem obigen Alias können wir sagen
Der Code wird auf alle Fernbedienungen einschließlich der Ursprungsfernbedienung aktualisiert.
quelle
Hinzufügen der
all
Fernbedienung wird etwas mühsam, da Sie sie auf jedem von Ihnen verwendeten Computer einrichten müssen.Auch die
bash
undgit
Aliase , sofern alle an , dass Sie drückt haben alle Fernbedienungen. (Beispiel: Ich habe eine Gabelungsshag
, die ich auf GitHub und GitLab pflege. Ich habe den Upstream Fernbedienung hinzugefügt, aber ich habe keine Berechtigung, darauf zu pushen.)Hier ist ein
git
Alias , der nur auf Remotes mit einer Push-URL pusht, die enthält@
.quelle
quelle