Wie kann ich von mehreren entfernten Standorten ziehen/drücken?

Lesezeit: 8 Minuten

Wie kann ich von mehreren entfernten Standorten ziehendrucken
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.

  • 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

1646898488 180 Wie kann ich von mehreren entfernten Standorten ziehendrucken
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 Masterwird es auf beide drücken Paws/Master und Codaset/Master nacheinander, um das Leben ein wenig einfacher zu machen.

  • git config -e öffnet die .git/config Datei in Ihrem bevorzugten Editor.

    – Richard

    27. Januar 2012 um 16:52 Uhr

  • Nur für den Fall. Bestätigen, dass eine Fernbedienung mit 2 URLs unter 1.7.12.4 immer noch funktioniert. Danke.

    – foobar

    9. November 2012 um 14:59 Uhr

  • Ich habe die “Origin”-Fernbedienung “all” genannt, um ihr eine etwas sauberere Semantik zu verleihen

    – ErichBSchulz

    17. Februar 2013 um 6:23 Uhr


  • @JamesWomack siehe die Antwort von @Malvineous unten. Es ist jetzt „korrekter“, als gitDie Befehlszeile von unterstützt dies nativ mit git remote set-url ... --add.

    – ELLIOTTKABEL

    19. September 2013 um 7:19 Uhr

  • Unter [branch "Master"] einstellen remote = Origin und git pull werde beide Fernbedienungen verwenden.

    – Bengt

    16. Juni 2014 um 19:07 Uhr


Wie kann ich von mehreren entfernten Standorten ziehendrucken
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 HEADtun:

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-pickje 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.

  • Sie sagen also, dass “git remote add foo ssh://foo.bar/baz” eine Kurzform erstellt, aber ich muss sie immer noch mit einem “git pull” überschleifen oder mit einem “git merge” (wie lautet hier die Syntax nach einem “git remove update”?) Funktioniert dieser Kurzname nicht auch für “git push”? Dh kann ich nicht “git push foo” etc (loop)? Danke

    – Zorzella

    11. Mai 2009 um 22:50 Uhr

  • “git pull” ist im Grunde “git fetch”, gefolgt von “git merge”. “git remote update” erledigt nur eine Reihe von “git fetch”-Aufrufen für Sie. Was bleibt, ist also das Bit “git merge”. Sie können “git merge origin/master” sagen und es wird die Master-Version von origin mit Ihrem aktuellen HEAD zusammenführen. “git pull origin master” macht dasselbe, obwohl es zuerst einen Abruf durchführt (und wenn Sie bereits ein git remote update durchgeführt haben, muss das nichts mehr abrufen, also ist es überflüssig). Ja, Sie können “git push foo” sagen und es werden alle passenden Branches auf die Fernbedienung namens “foo” geschoben.

    – araqnid

    11. Mai 2009 um 23:19 Uhr

  • Anscheinend können Sie auch einen einzigen Push für mehrere Repos haben, überprüfen Sie diese Antwort für weitere Details stackoverflow.com/questions/14290113/…

    – manei_cc

    7. Mai 2014 um 16:20 Uhr

1646898488 931 Wie kann ich von mehreren entfernten Standorten ziehendrucken
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 rate dringend von dieser Lösung ab. Wir haben es in unserem Unternehmen verwendet und hatten ernsthafte Probleme mit Hooks, die an einem Repository fehlschlugen, aber nicht an dem anderen. Changesets waren dann nur noch in einem Repository vorhanden.

    – Michael Schmeißer

    7. Juni 2013 um 7:37 Uhr

  • @MichaelSchmeißer: Vermutlich konntest du die Fehlermeldungen beim Pushen sehen, das Problem beheben und dann erneut pushen, um alles wieder in einen sauberen Zustand zu bringen?

    – Malvine

    7. Juni 2013 um 21:38 Uhr

  • Das Problem ist, dass das Reparieren des abgelehnten Pushs das Ändern der Commits beinhaltet, die bereits in das andere Repo gepusht wurden. Wenn also jemand bereits auf diesen Commits basiert, wenn sie behoben sind, werden die Dinge wirklich unangenehm, was in unserem Büro der Fall war.

    – Michael Schmeißer

    7. Juni 2013 um 22:42 Uhr

  • Ah ja, das könnte knifflig werden. Allerdings scheint mir, dass die Haken neu gestaltet werden müssen. Ein fehlgeschlagener Push unterbricht Git normalerweise nicht, daher ist die Einführung eines neuen Fehlerpunkts (der Sie auch daran hindert, eine raffinierte Git-Funktion zu verwenden) wahrscheinlich nicht die beste Lösung. Natürlich sage ich das ohne zu wissen, was Ihre Anforderungen sind…

    – Malvine

    7. Juni 2013 um 23:22 Uhr

  • Nein. Seit ich meine Frage geschrieben habe, habe ich andere Web-Postings gelesen und dieses Ding dann getestet. Durch das Lesen anderer Postings habe ich den Verdacht, dass nur die erste Zeile verwendet wird. Ich habe das gerade getestet: Tatsächlich wird nur die URL aus der ersten Zeile von überprüft git fetch. (In Anbetracht dessen verstehe ich den Zweck nicht git remote set-url --add kann ohne sein --push.)

    – imz – Ivan Zakharyaschev

    19. Mai 2016 um 12:32 Uhr


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;"

Wie kann ich von mehreren entfernten Standorten ziehendrucken
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

1646898489 728 Wie kann ich von mehreren entfernten Standorten ziehendrucken
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.

  1. Von der ersten URL klonen:
git clone git@github.com:myuser/myrepo.git
  1. Ü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)
  1. Fügen Sie die zweite Fernbedienung hinzu:
git remote set-url --add origin git@gitlab.com:myuser/myrepo.git
  1. 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
  1. 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

986940cookie-checkWie kann ich von mehreren entfernten Standorten ziehen/drücken?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy