Frage

Ich brauche meine Entwicklung Bäume synchron zu halten auf verschiedenen Computern, ohne Netzwerkverbindung zwischen ihnen.

Wir haben eine zentrale Git Repository, und ich normalerweise auf meinem eigenen Klon auf meinem Büro-Computer arbeiten. Manchmal brauche ich auf einem anderen Computer eine gewisse Entwicklung zu tun, die nie mit dem Büronetzwerk verbunden ist. Keiner der Computer immer mit dem Internet verbunden. Die Entwicklung kann auf beiden Computern zwischen Synchronisierungen ausgeführt werden.

habe ich die Hilfeseiten für git-Bündel lesen, die wie die besten scheint Werkzeug, aber ich bin nicht wirklich sicher, wie ein guter Workflow eingerichtet werden könnte.

Können Sie mir einen Rat geben oder Zeiger?

War es hilfreich?

Lösung

Bundles!

Der Workflow mit git Bündel wird im wesentlichen das gleiche wie jeder andere Workflow sein. Das mag nicht schrecklich hilfreiche Ratschläge erscheinen, aber hier ist es:. Verwenden Sie, was Sie Workflow normalerweise verwenden, und ersetzen Sie „Push / Pull“ mit „trägt ein Bündel hier nach dort auf einem Flash-Laufwerk, dann ziehen“

Der Mann Seite hat eigentlich eine ziemlich gute Anleitung für immer gehen mit diesem, obwohl es eher ein Beispiel Einweg ist. Aus Gründen der Vollständigkeit, hier ist eine leicht modifizierte Version davon, die zeigt, wie Informationen in beiden Richtungen bewegen:

# on hostA, the initial home of the repo
hostA$ git bundle create hostA.bundle --branches --tags

# transfer the bundle to hostB, and continue:
hostB$ git clone /path/to/hostA.bundle my-repo
# you now have a clone, complete with remote branches and tags
# just to make it a little more obvious, rename the remote:
hostB$ git remote rename origin hostA

# make some commits on hostB; time to transfer back to hostA
# use the known master branch of hostA as a basis
hostB$ git bundle create hostB.bundle ^hostA/master --branches --tags

# copy the bundle back over to hostA and continue:
hostA$ git remote add hostB /path/to/hostB.bundle
# fetch all the refs from the remote (creating remote branches like hostB/master)
hostA$ git fetch hostB
# pull from hostB's master, for example
hostA$ git pull

# make some commits on hostA; time to transfer to hostB
# again, use the known master branch as a basis
hostA$ git bundle create hostA.bundle ^hostB/master --branches --tags
# copy the bundle to hostB, **replacing** the original bundle
# update all the refs
hostB$ git fetch hostA

# and so on and so on

Der Schlüssel, was zu beachten ist, dass Sie ein Bündel als Remote hinzufügen können, und mit ihm interagieren so wie man es mit einer anderen Fernbedienung. Zu aktualisieren, die Fernbedienung, fallen nur in einem neuen Bündel, die vorherige ersetzt.

Ich habe auch einen etwas anderen Ansatz zur Kommissionierung eine Grundlage genommen. Der Mann Seite verwendet Tags, immer auf dem Laufenden mit den letzten Refs gehalten, die an den anderen Host übertragen wurden. Ich habe einfach die entfernten Zweige verwendet, die auf den letzten Refs beziehen übertragen von dem anderen Host. Es ist ein wenig ineffizient; Sie Bündelung am Ende mehr als nötig, da es ein Schritt hinter ist. Aber Flash-Laufwerke sind groß, Bundles sind klein, und die Refs verwenden, haben Sie bereits statt mit einem zusätzlichen Schritt zu machen und über Tags spart viel Aufwand vorsichtig sein.

Das einzige, was macht ein wenig Mühe bündelt ist, dass man nicht auf sie schieben kann, und Sie können nicht „rebase“ sie. Wenn Sie das Paket basierend auf einer neuen Basis wollen, müssen Sie es neu erstellen. Wenn Sie daran Commits wollen, müssen Sie es neu erstellen. Dieser Streit führt zu meinem nächsten Vorschlag ...

Repo auf einem USB-Stick

Ehrlich gesagt, es sei denn, Ihr Repo wirklich groß ist, könnte dies so einfach sein. Setzen Sie einen nackten Klon auf einem USB-Stick, und Sie können Push-to, und ziehen daraus von beiden Computern. Behandeln Sie es wie Ihre Netzwerkverbindung. zur Übertragung an die zentrale Repo nötig? Schließen Sie es an!

Andere Tipps

@Jefromi Antwort war toll -. 10x besser als die git docs, die über unverständliche Anforderungen und Maßnahmen ausführlich gehen auf

Es ist immer noch ein bisschen komplizierte, also hier ist der einfachste Fall synching einmal (in meinem Fall: AB: ein Offline-Laptop mit WLAN-Karte gebrochen, TO: ein Desktop mit Netzzugang). Basierend auf @ Jefromi Antwort scheint dies zu funktionieren:

AHEAD = Maschine, die durch eine bestimmte Anzahl von Commits voraus ist. BEHIND = Maschine möchten Sie die Commits

kopieren
1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

BEIDE: Kopie myBundleName.bundle (mit E-Mail, USB, was auch immer)

HINTER: (Ort der Datei myBundName.bundle wo immer Sie wollen außerhalb der Projektordner)

2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

So lange, wie Sie den Zweig-Name auf dem Ende (standardmäßig, wenn Sie nicht Zweige mit „Master“) umfassen, scheint dies zu funktionieren, und nicht eine der internen Referenzen auf HINTER ersetzen -. so können Sie synch noch zum / vom Ursprung Master

d. wenn HINTER Internetzugang hat, ist es noch sicher zu tun:

(OPTIONAL) 4. BEHIND: git push

... und es wird den Haupt-Repository aktualisieren, als ob Sie die Änderungen lokal getan worden waren, wie üblich, auf BEHIND.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top