Skip to content

Git-Repository auf Offline-Rechner kopieren und über Memory-Stick pushen/ziehen

Lösung:

Um ein komplettes Git-Repo zu kopieren, musst du nur den Ordner kopieren .git; es enthält alles. Git verwendet sichere Dateinamen und ignoriert Zeitstempel innerhalb des Repositorys, sodass diese Daten vor den üblichen Macken des Dateisystems geschützt sind.

Erstellen Sie auf dem Zielcomputer einen Ordner, kopieren Sie die .git Ordner drin. Jetzt git checkout <branch> wird dir ein Arbeitsexemplar besorgen.

Wenn Sie Patches anstelle des gesamten Repositorys hin und her verschieben möchten, dann git format-patch <branch> schafft sie. Der Befehl erstellt alle Patches, die zum Aktualisieren eines Remote-Repositorys erforderlich sind (dh die Ausgabe enthält alles, was noch nicht gepusht wurde). Sie können ihm auch Commit-IDs (= mit diesem Commit beginnen) oder Bereiche zuweisen.

Um sie anzuwenden, verwenden Sie git am < 0001.... auf dem Remote-Repository.

Verwandt:

  • http://rypress.com/tutorials/git/patch-workflows

Um Ihr Repo auf den Memory-Stick zu kopieren, verwenden Sie einfach git clone, und verwenden Sie dann git pull um es zu aktualisieren.

Führen Sie beispielsweise auf Ihrem Online-Computer mit eingestecktem Memory-Stick

cd <memory-stick-mount-point>
git clone <local-path-to-git-repo>

jetzt die <local-path-to-git-repo> wird sein origin Fernbedienung für das Repo auf Ihrem USB-Stick, damit Sie es später einfach verwenden können git push/pull (wenn auf dem Online-Computer gemountet), um Ihre Offline-Arbeit zu synchronisieren.

Das Git-Repo auf dem Memory Stick ist in sich abgeschlossen, sodass Sie jetzt auf jedem Computer dagegen arbeiten und dann wie oben synchronisieren können, wenn Sie es auf Ihrem Online-Rechner mounten.

Bearbeiten, re: Stick nicht selbst montieren:

Wenn Sie den Administrator bitten können, git clone Das Repo auf den Memory Stick ist in Ordnung. Andernfalls kann Ihr Admin einfach das gesamte Verzeichnis project.git (wenn es sich um ein reines Repo handelt) oder project/.git (sonst) auf Ihren Memory-Stick kopieren, und Sie können dagegen arbeiten. Achten Sie darauf, dass die Fernbedienungen , usw. werden die des Online-Rechners sein.

Ziehen ist dann kein Problem, aber das Pushen erfordert möglicherweise eine weitere Umgehung, wenn Sie Ihrem Systemadm nicht vertrauen, Ihre Zusammenführungskonflikte für Sie zu lösen. Wenn Sie Ihre eigene(n) Filiale(n) haben, ist das Zusammenführen kein Problem. Andernfalls könnten Sie "offline" zusammenführen, zwei Offline-Kopien des Repositorys, eines, an dem Sie arbeiten, und eines, das Ihr "Ursprung" ist, und wenn Sie zurückkommen, bitten Sie den Sysadm, git pull zum "Ursprungs"-Repository zu senden, und führen Sie dann auf einem Offline-Computer dies aus zwischen den beiden Memory-Stick-Repositorys zusammenführen und dann den Sysadm bitten, Ihr Ursprungs-Repository mit dem Online-Repository zusammenzuführen.

Dies fühlt sich jedoch etwas brüchig und offen für Rennbedingungen an, daher würde ich wirklich versuchen, separate Zweige zu erstellen, bevor ich "offline gehe".

Der Befehl git bundle ist dafür ausgelegt. Um beispielsweise den Master-Zweig des Repositorys offline zu klonen,

cd my-repository
git bundle create offline-repos master

Das wird das ganze speichern master Verzweigen Sie in eine Datei namens offline-repos. Kopieren Sie die Datei auf einen anderen Computer. Geben Sie auf diesem Computer

git clone -b master offline-repos new-repos

Dadurch wird der Ordner erstellt new-repos, ausgecheckt von offline-repos. Die Bundle-Datei, aus der Sie geklont haben, wird als Remote-Repository behandelt. Sie können sogar ein Bundle erstellen, das die Änderungen seit einer Referenz speichert, wie in:

git bundle create offline-repos e45ad329..master

Wenn Sie die Bundle-Datei ersetzen offline-repos Mit einem Bundle mit neuen Änderungen können Sie git pull daraus, wie in:

cd new-repos
git pull
Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.