2016-03-18 14 views
0

Ich habe zwei Git-Repos, die synchron gehalten werden sollten und nicht gleichzeitig zugegriffen werden können. Einer ist bei der Arbeit und einer ist zu Hause und es ist keine Netzwerkverbindung möglich.einen Zweig von einem zum anderen kopieren Repo

Wie wird mit dieser einfachen Einrichtung verfahren?

Was ich versucht habe:

Ich habe ein Klon, der „weiß“, beide repos und existieren auf einem tragbaren Festplatte.

Lassen Sie uns sagen jemand eine Niederlassung in „Arbeit“ geschaffen hat, und ich möchte es den Repo „nach Hause“ übertragen. Wie macht man das?

Wenn ich nur ein git pull ich folgende auf meinem Klon erhalten:

$ git branch --list --all 
*master 
origin/HEAD -> origin/master 
origin/bugfix_component_condition_destruction_fail 
origin/master 
origin/remove_stoplist_copy_and_erase 

F: Hat dies nur bedeuten, dass mein lokaler Klon „weiß“, dass es diese aufgelisteten Filialen irgendwo und keine wirklichen Daten auf meinem klon erwarte ich für den auch lokal vorhandenen einen namens "master"?

Es ist einfach, Master zu beiden Repos zu ziehen/schieben. Aber irgendein anderer scheint auf meinem lokalen Klon nicht zu existieren. Muss ich jeden entfernten Zweig zu einem lokalen meines Klons verfolgen und ihn dann in das andere Repo übertragen?

Q: Gibt es eine typische Art und Weise mit zwei repos zu beschäftigen, sie erhalten beide synchron, wenn auf beiden repos wird Commits geschoben werden?

Q: Gibt es einen Trick, um alle Infos und auch den Inhalt aller Remote-Niederlassungen zu bekommen.

Für mich ist es ein bisschen mysteriös was ein "Klon" eines Repos bedeutet? Es scheint kein echter Klon zu sein, sondern nur einige Metadaten und der Master-Zweig. Ist das richtig?

EDIT:

Wenn ich anfangen gitk --all ich alle Änderungen zu sehen, die in der Branche erfolgt sind. Das sieht so aus, dass der Inhalt der Verzweigung im Klon liegt.

Aber wenn ich tun:

$git checkout -b remove_stoplist_copy_and_erase --track remotes/origin/remove_stoplist_copy_and_erase 
error: Not tracking: ambiguous information for ref refs/remotes/origin/remove_stoplist_copy_and_erase 
Switched to a new branch 'remove_stoplist_copy_and_erase' 

Also ich habe:

$git checkout origin/remove_stoplist_copy_and_erase 
$git checkout -b remove_stoplist_copy_and_erase 

und jetzt schieben: $ git push --set-Upstream ex

remove_stoplist_copy_and_erase

Ich fürchte, zu muss dies manuell für alle Zweige auf beiden Fernbedienungen tun, um beide synchron zu bekommen. Gibt es eine "Best Practice" für den Job?

Antwort

1

Sie können Pakete dafür verwenden.Keine Notwendigkeit, die volle Repository auf portable Datenträger

nennen wir sie repo1 und repo2

Bei Repo1 Sie rufen:

  • $ git fetch <bundle2> 'refs/heads/*:refs/remotes/repo2/*' Änderungen von Bundle-Datei an repo2 erstellt importieren
  • $ git bundle create <bundle1> --all --not --remotes=repo2 zu erstellen ein Bündel zum Senden an Repo2

Bei Repo2, corresp ondingly:

  • $ git fetch <bundle1> 'refs/heads/*:refs/remotes/repo1/*' und
  • $ git bundle create <bundle2> --all --not --remotes=repo1

Die manpage enthält weitere Informationen und Beispiele.

0

A1: Ja, Sie müssen git fetch --all auf Ihrem Klon ausführen, um alle Remote-Zweige zu erfassen.

A2: Es gibt mehrere Möglichkeiten, dies zu erreichen, aber sie sind alle prozedural (nicht im Sinne der Softwareentwicklung).

A3: Siehe A1.

+0

Wenn ich eine 'git fetch - all'ow machte, um mit dem Klon danach zu handeln? Siehe meine Bearbeitung in meiner Frage. Ihre Informationen für A2 sind nicht sehr hilfreich. "Es gibt mehrere Wege" ist keine Antwort auf die Frage, wie man etwas macht. Ein Weg würde mir helfen :-) Dass es einen Weg gibt ist vor deiner Antwort ganz klar! – Klaus

+0

@Klaus: Ich stimme zu, dass meine A2 keine hilfreiche Antwort war. Ein Weg, dies zu tun, ist mit Patches (und Entschuldigungen für die Verknüpfung von Offsite): https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/ – TriskalJM

+0

I bin unsicher, was du mit _deal mit dem Klon_ meinst? Der Klon sollte jetzt alle Informationen enthalten, die der ursprüngliche Repo hatte, also behandeln Sie ihn genauso wie den Remote, außer dass Sie Änderungen, die Sie im Klon vorgenommen haben, übertragen müssen. – TriskalJM

Verwandte Themen