418 Stimmen

Exportieren eines Verstecks auf einen anderen Computer

Ich brauche eine Möglichkeit, ein gespeichertes Wechselgeld auf einen anderen Computer zu exportieren.

Auf Computer 1 habe ich

$ git stash save feature

Ich versuche, den Stash-Patch in eine Datei zu übertragen und sie dann auf einen anderen Computer zu importieren

$ git stash show -p > patch

Mit diesem Befehl erhalte ich eine Datei, die ich auf einen anderen Computer verschieben kann, auf dem dieses Repository geklont ist. Die Frage ist jedoch, wie ich es wieder als Versteck importieren kann.

360voto

poke Punkte 338075

Sie können eine Patchdatei anwenden (ohne die Änderungen bereits zu übertragen), indem Sie einfach

git apply patchfile

Dann können Sie einfach einen neuen Vorrat im aktuellen Arbeitsverzeichnis anlegen:

git stash

126voto

Simran Punkte 1914

Sie können Stash als Patch-Datei von einem Rechner aus erstellen und diese Patch-Datei dann an andere Rechner weitergeben.

Den Stash als Patch erstellen

$ git stash show "stash@{0}" -p > changes.patch

Der "stash@{0}" ist die Referenz des Stashs und erstellt eine Patchdatei mit dem neuesten Stash. Wenn Sie eine andere Datei wünschen, verwenden Sie den Befehl $ git stash list um Ihre Liste der Verstecke zu sehen und das gewünschte Versteck auszuwählen.

Einsetzen des Patches

Übertragen Sie diesen Vorrat nun auf einen anderen Rechner und fügen Sie ihn in den Stammordner Ihres Projekts ein. Führen Sie dann diesen Befehl aus

$ git apply changes.patch

Wenn ein Fehler vorliegt und Sie die Änderung rückgängig machen wollen

$ git apply changes.patch --reverse

24voto

shafeeq Punkte 1361

Alternativ können Sie die gesamten lokalen Stashes (+ andere lokale Zweige, lokale Tags usw.) wie folgt auf einen anderen Computer kopieren:

  • git pull in Ihrem alten und neuen Git-Verzeichnis, um sicherzustellen, dass beide über die neuesten Änderungen verfügen (oder stellen Sie sicher, dass beide Repos denselben HEAD mit git reset --hard commit-hash ).
  • Kopieren Sie die .git Ordner aus dem alten Git-Verzeichnis in das neue Repository

23voto

Chris Maes Punkte 30364

Alternativ können Sie einen Zweig aus Ihrem Vorrat (auf Computer 1) erstellen, indem Sie

git stash branch stashed_changes_branch

Übertragen Sie Ihre Änderungen:

git commit -a

und fügen Sie ihn dann als Remote auf Computer 2 hinzu:

git remote add pc1 user@computer1:/path/to/repo

können Sie nun die Ferninformationen abrufen, indem Sie

git fetch pc1

Jetzt können Sie die Übergabe so importieren, wie Sie es wünschen; mit Git-Pick , Git-Rebase oder was immer Sie wollen... Wenn Sie wollen, dass es so aussieht, wie Sie es gerade gemacht haben git stash apply ; Sie können verwenden git cherry-pick --no-commit.


Wenn Sie keine direkte Verbindung zwischen Computer1 und Computer2 haben, können Sie ein Remote-Programm (z. B. Github oder etwas Ähnliches) verwenden:

git push origin stashed_changes_branch

und auf Computer2:

git fetch

13voto

Ein Stash ist ein spezieller Merge-Commit des Arbeitsbaums zwischen dem Basis-Commit und dem Index. Eine Möglichkeit wäre, beide als separate Patches zu speichern, den Stash als erstes Elternteil auszuchecken, den Index und den Arbeitsbaum aus den beiden Patches wiederherzustellen und schließlich den Stash wiederherzustellen (eine Antwort scheint diesen Weg zu gehen).

Dies ist erforderlich, um alle Informationen aus dem Vorrat vollständig wiederherzustellen. Wenn Ihnen das nicht wichtig ist, sollten Sie vor der Wiederherstellung zumindest den ersten übergeordneten Ordner des Vorrats auschecken, um Konflikte zu vermeiden und den Überblick darüber zu behalten, wo der Vorrat erstellt wurde.

Das habe ich gemacht, um alle Stashes von einem Repo zum anderen wiederherzustellen. Wenn Sie sie nicht auf demselben Computer haben können, können Sie die Stash-Tags in einem Bundle speichern, nachdem Sie sie erstellt haben, und die Referenzliste und das Bundle auf den Zielcomputer kopieren.

Von der Wurzel des ursprünglichen Repo:

  1. Abrufen der Liste der Verstecknachweise
  2. Markieren Sie Ihre Stash-Referenzen, damit Sie sie mit git fetch abrufen können (der Tag-Name spielt keine Rolle, ändern Sie ihn, wenn es einen Konflikt gibt. Ich benutze stash_ + die Nummer(n) im logischen Versteck ref)
  3. Konvertieren der logischen Referenzen in sha1-Hashes in umgekehrter Reihenfolge - wir werden sie später verwenden
  4. Speichern Sie den Repo-Pfad - auch für später

    refs=$(git stash list|cut -d: -f1) for ref in $refs; do git tag stash_${ref//[^0-9]} $ref; done refs=$(git rev-parse $refs|tac) oldpath=$PWD

NB: Dies erfordert die Bash oder eine kompatible Shell (ksh, zsh sollten genügen...) Sie könnten auch eine Variable inkrementieren, z.B. stash_$((i++)) wenn Ihre Shell keine Unterstützung für ${param//pattern}

In dem neuen Repo wird nun für jede Ref:

  1. Holen Sie die Refs aus dem alten Repo (wir müssen nicht einmal die Tag-Namen verwenden, da wir sie mit Tags versehen haben, können wir sie mit git fetch abrufen)
  2. Importieren Sie den Stash erneut aus dem Ref, wobei Sie den Betreff des Refs als Stash-Nachricht verwenden.

    for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X