Bündel!
Der Workflow mit Git-Bundle wird im Wesentlichen der gleiche sein wie jeder andere Workflow. Dies scheint kein besonders hilfreicher Rat zu sein, aber hier ist es: Verwenden Sie den Workflow, den Sie normalerweise verwenden würden, und ersetzen Sie "Push / Pull" durch "Tragen Sie ein Bundle auf einem Flash-Laufwerk von hier nach dort und ziehen Sie dann".
Die Manpage bietet tatsächlich eine ziemlich gute Anleitung, um damit loszulegen, obwohl es sich eher um ein Einwegbeispiel handelt. Der Vollständigkeit halber hier eine leicht modifizierte Version, die zeigt, wie Informationen in beide Richtungen verschoben werden:
# 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
Das Wichtigste ist, dass Sie ein Bundle als Fernbedienung hinzufügen und wie mit jeder anderen Fernbedienung damit interagieren können. Um diese Fernbedienung zu aktualisieren, legen Sie einfach ein neues Bundle ab und ersetzen Sie das vorherige.
Ich habe auch einen etwas anderen Ansatz bei der Auswahl einer Basis gewählt. Die Manpage verwendet Tags, die immer mit den letzten Verweisen auf dem neuesten Stand gehalten werden, die auf den anderen Host übertragen wurden. Ich habe einfach die Remote-Zweige verwendet, die sich auf die letzten vom anderen Host übertragenen Refs beziehen . Es ist ein bisschen ineffizient; Sie werden am Ende mehr bündeln als nötig, da es einen Schritt zurück liegt. Aber Flash-Laufwerke sind groß, Bundles sind klein, und die Verwendung der bereits vorhandenen Refs, anstatt einen zusätzlichen Schritt unternehmen und auf Tags achten zu müssen, spart viel Aufwand.
Das einzige, was Bundles zu Problemen macht, ist, dass Sie nicht auf sie drängen und sie nicht "neu gründen" können. Wenn Sie das Bundle auf einer neuen Basis haben möchten, müssen Sie es neu erstellen. Wenn Sie neue Commits möchten, müssen Sie diese neu erstellen. Dieser Ärger gibt Anlass zu meinem nächsten Vorschlag ...
Repo auf einem USB-Stick
Ehrlich gesagt, wenn Ihr Repo nicht wirklich groß ist, könnte dies genauso einfach sein. Wenn Sie einen nackten Klon auf ein USB-Stick legen, können Sie von beiden Computern aus darauf drücken und daraus ziehen. Behandle es wie deine Netzwerkverbindung. Müssen Sie zum zentralen Repo wechseln? Steck es ein!