Exportieren Sie einen Stash auf einen anderen Computer

Lesezeit: 9 Minuten

Exportieren Sie einen Stash auf einen anderen Computer
Marcelo A

Ich brauche eine Möglichkeit, eine gespeicherte Änderung auf einen anderen Computer zu exportieren.

Auf Computer 1 tat ich

$ git stash save feature

Ich versuche, den Stash-Patch in eine Datei zu bringen und ihn dann auf einen anderen Computer zu importieren

$ git stash show -p > patch

Dieser Befehl gibt mir eine Datei, die ich auf einen anderen Computer verschieben kann, auf dem dieses Repo geklont ist, aber die Frage ist, wie ich es wieder als Stash importieren kann.

  • Fyi git stash save ist jetzt zugunsten von veraltet git stash push

    – Ewan

    11. August 2019 um 11:13 Uhr

  • Unglücklicherweise, git stash show ignoriert nicht nachverfolgte Dateien, selbst wenn sie zwischengespeichert sind.

    – Andrzej Wąsowski

    8. Juni 2021 um 6:46 Uhr

  • @AndrzejWąsowski verrücktes Timing: zwei Tage vor deinem Kommentar, git 2.32.0 wurde mit entlassen [-u|--include-untracked|--only-untracked] zum git stash show. Meine Ersatzbefehle für die in Frage kommenden sind jetzt git stash push --include-untracked und git stash show --include-untracked --patch > patch.

    – Ben Stuten

    16. August 2021 um 19:10 Uhr

Sie können eine Patch-Datei anwenden (ohne die Änderungen noch festzuschreiben), indem Sie sie einfach ausführen

git apply patchfile

Dann können Sie einfach einen neuen Stash aus dem aktuellen Arbeitsverzeichnis erstellen:

git stash

  • Nachdem ich diese Antwort gelesen hatte, fragte ich mich, wie man einen bestimmten Vorrat aus all meinen Vorratsspeichern auswählt. Die Antwort darauf finden Sie hier: stackoverflow.com/a/1910142/1148702 . In diesem Fall habe ich am Ende Folgendes getan: git stash show "[email protected]{0}" -p > patch anstelle des zweiten Shell-Befehls des OP.

    – Tim Arnold

    16. März 2016 um 15:03 Uhr

  • @TimCamber Ich glaube nicht, dass Sie die doppelten Anführungszeichen brauchen [email protected]{0}..

    – Ari-Gold

    17. August 2017 um 21:15 Uhr

  • @arigold Hängt von der verwendeten Shell ab. Beispielsweise in PowerShell braucht man sie, da geschweifte Klammern dort eine spezielle Syntax sind.

    – stupsen

    17. August 2017 um 21:24 Uhr

  • Wenn jemand die Fehlermeldung “git patch does not apply” erhält, versuchen Sie dies bitte git apply --reject --whitespace=fix mychanges.patch

    – Rishiehari

    22. Oktober 2018 um 22:20 Uhr


  • @rishiehari SEHR SCHÖN!! Ich hatte eine Menge patch does not apply und cannot apply binary patch to my_file.aar without full index line und git apply --reject --whitespace=fix mypatchfile hat einen ordentlichen Job gemacht. Es hatte immer noch Probleme mit zwei Dateien, aber ich kann diese Dateien manuell kopieren

    – Irgendwer irgendwo

    8. August 2019 um 23:48 Uhr

Sie können Stash als Patch-Datei von einem Computer erstellen und diese Patch-Datei dann für andere Computer freigeben.

Stash als Patch erstellen

$ git stash show "[email protected]{0}" -p > changes.patch

[email protected]{0}“ ist die Referenz des Stash. Es wird eine Patch-Datei mit dem neuesten Stash erstellt. Wenn Sie einen anderen Befehl verwenden möchten $ git stash list um Ihre Liste mit Stashes anzuzeigen und auszuwählen, welches Sie patchen möchten.

Anwenden des Pflasters

Übertragen Sie diesen Stash nun auf einen anderen Computer 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 möchten

$ git apply changes.patch --reverse

  • Ich musste das Argument „-p“ durch „–binary“ ersetzen, damit dies ordnungsgemäß funktioniert

    – Farhan Haider

    22. Oktober 2020 um 7:26 Uhr

  • Ich bekomme den Fehler patch does not apply wenn ich versuche, den Patch auf demselben Computer anzuwenden, den ich erstellt habe.

    – TheCrazyProgrammer

    1. März 2021 um 17:52 Uhr

  • @TheCrazyProgrammer Bist du gelaufen git apply changes.patch oder git stash apply changes.patch? Ersteres funktioniert, letzteres gibt mir Fehler (mit oder ohne Verwendung von < um die Datei als Eingabe zu lesen).

    – yuyu5

    24. Mai 2021 um 18:06 Uhr

  • @TheCrazyProgrammer verwenden git apply --3way changes.patch um später zu versuchen, Konflikte zu lösen, wenn Sie “patch does not apply” erhalten haben. Weitere Informationen: stackoverflow.com/questions/4770177/git-patch-does-not-apply/…

    – epideda

    16. August 2021 um 23:35 Uhr

  • funktionierte nicht, wenn der Diff auch neue Dateien erstellen sollte

    – Aryeh Beitz

    20. Oktober 2021 um 11:41 Uhr

Exportieren Sie einen Stash auf einen anderen Computer
Chris Maes

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

git stash branch stashed_changes_branch

Bestätigen Sie Ihre Änderungen:

git commit -a

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

git remote add pc1 [email protected]:/path/to/repo

Jetzt können Sie die Remote-Informationen mit abrufen

git fetch pc1

Jetzt können Sie den Commit wie gewünscht importieren. verwenden git Kirschpickel, Git-Rebase oder was auch immer Sie möchten … Wenn Sie möchten, dass es so aussieht, wie Sie es gerade getan haben git stash anwenden; Sie können verwenden git cherry-pick –no-commit.


Wenn Sie keine direkte Verbindung zwischen Computer1 und Computer2 haben; Sie können eine Fernbedienung verwenden (wie Github oder ähnliches):

git push origin stashed_changes_branch

und auf computer2:

git fetch

  • Dies setzt voraus, dass das Quellsystem (Computer1) offen ist, um externe Verbindungen zu empfangen, was für die meisten Leute, die hier landen, wahrscheinlich nicht zutrifft. Wenn Sie die Verzweigungsroute gehen möchten, warum verschieben Sie nicht einfach eine temporäre Verzweigung zum entfernten Ursprung und ziehen diese von Computer2? Sie können den Remote-Zweig löschen, sobald Sie ihn gezogen haben, wenn Sie ihn nicht behalten möchten. Branches in Git sind so billig, dass es normalerweise wenige Gründe gibt, sie nicht zu verwenden.

    – unteilbar

    27. September 2016 um 6:45 Uhr


  • @indivisible Ich stimme nicht zu, dass es heute viele Möglichkeiten gibt, zwei Computer im Internet zu verbinden. Die in der Antwort beschriebene Technik kann nützlich sein, um eine laufende Arbeit von einem Laptop auf einen Desktop in einem LAN zu übertragen. Sogar ein virtueller VPN-Dienst wie Hamachi würde verwendet, um Dateien über das Internet überall direkt zwischen Computern zu übertragen, auf denen Git ausgeführt wird.

    – dampfbetrieben

    18. Juli 2017 um 13:41 Uhr

  • @steampowered, klar dürfen für einige Personen/Situationen wahr sein, aber ich hielt es für einen erwähnenswerten Punkt für zukünftige Leser, da es eine harte Anforderung ist, dass diese Lösung funktioniert, und das Ändern Ihrer lokalen Umgebung/Ihres lokalen Systems, um eingehenden Datenverkehr zu akzeptieren, erfordert eine nicht triviale Konfiguration, die meiner Meinung nach ist “übertrieben” für eine Aufgabe wie diese. Wenn Ihre Systeme bereits geöffnet sind, verwenden Sie auf jeden Fall diese Antwort – sie ist nicht falsch. Ich habe nur das Gefühl, dass die Mehrheit der Benutzer, die hier landen, nicht in einer solchen Situation sein wird.

    – unteilbar

    18. Juli 2017 um 13:52 Uhr

  • Stashes sind Commit-Objekte und haben daher bereits einen Commit-Hash (vgl git stash list --oneline), sodass Sie den Stash technisch gesehen nicht auf ein neues Commit-Objekt anwenden müssen. Mit anderen Worten, das Erstellen eines neuen Zweigs ist nicht erforderlich. Allerdings ist es, gelinde gesagt, schwierig, einen Vorrat direkt auf eine Fernbedienung zu schieben.

    – Tyler Crompton

    31. Juli 2017 um 8:48 Uhr

Exportieren Sie einen Stash auf einen anderen Computer
shafeeq

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

  • git pull sowohl in Ihrem alten als auch in Ihrem neuen Git-Verzeichnis, um sicherzustellen, dass beide die neuesten Änderungen haben (Oder stellen Sie sicher, dass beide Repos dasselbe haben HEAD verwenden git reset --hard commit-hash).
  • Kopiere das .git Ordner aus dem alten Git-Verzeichnis in das neue Repository

1647267492 978 Exportieren Sie einen Stash auf einen anderen Computer
KEMBL

So exportieren Sie Stash in SourceTree:

  1. Erstellen Sie einen neuen Zweig “StashTransfer” aus einem Zweig, in dem Sie Ihren Stash verwenden werden
  2. Wenden Sie Ihren Vorrat darauf an und machen Sie einen Commit

  3. Klicken Sie auf Ihr Commit und erstellen Sie daraus einen Patch, nehmen Sie die Patch-Datei mit.

  4. Gehen Sie zu einem anderen Repository, wählen Sie denselben übergeordneten Zweig aus, den Sie gerade in 1) verwendet haben.

  5. Aktionen / Patch anwenden, wählen Sie Modus: Arbeitskopiedateien ändern, drücken Sie Patch anwenden, jetzt haben Sie nicht festgeschriebene Änderungen aus dem Patch in Ihrer aktuellen Arbeitsumgebung

  6. Erstellen Sie einen neuen Stash für das aktuelle Repo

Eine andere Möglichkeit ist rsync der .git Ordner von einem Computer auf einen anderen Computer. rsync verarbeitet nur Dateiänderungen (schneller als eine Kopie).

Ein Nachteil dieses Ansatzes ist, dass die Konfigurationen auch überschrieben würden, was möglicherweise nicht erwünscht ist, wenn Sie unterschiedliche .git-Konfigurationen zwischen den beiden Computern ausführen. Aber Sie könnten dies überwinden, indem Sie Dateien mit der ausschließen --exclude Möglichkeit ein rsync.

Insgesamt denke ich, dass eine native Git-Lösung sauberer ist, aber das hier rsync hack könnte für jemanden in Eile nett sein, der mit rsync besser vertraut ist als mit git.

Ein Stash ist ein spezielles Zusammenführungs-Commit des Arbeitsbaums zwischen dem Basis-Commit und dem Index. Eine Möglichkeit könnte darin bestehen, jeden als separate Patches zu speichern, den ersten übergeordneten Stash auszuchecken, den Index und den Arbeitsbaum aus den beiden Patches wiederherzustellen und schließlich den Stash wiederherzustellen (eine Antwort scheint so zu gehen).

Dies ist erforderlich, um alle Informationen aus dem Stash vollständig neu zu erstellen, und wenn Sie sich darum nicht kümmern, sollten Sie zumindest den ersten Elternteil des Stashs vor der Wiederherstellung auschecken, um Konflikte zu vermeiden und zu verfolgen, wo der Stash erstellt wurde.

Dies ist, was ich getan habe, um alle Stashes von einem Repo zum anderen vollständig wiederherzustellen. Wenn Sie sie nicht auf demselben Computer haben können, können Sie die Stash-Tags nach dem Erstellen in einem Bundle speichern und die Refs-Liste und das Bundle auf den Zielcomputer kopieren.

Aus der Wurzel des ursprünglichen Repos:

  1. Holen Sie sich die Liste der Stash-Referenzen
  2. Markieren Sie Ihre Stash-Refs, damit Sie sie mit git fetch abrufen können (die Tag-Namen spielen keine Rolle, ändern Sie sie, wenn es einen Konflikt gibt. Ich habe verwendet stash_ + die Nummer(n) im logischen Stash ref)
  3. Konvertieren Sie die logischen Referenzen in sha1-Hashes in umgekehrter Reihenfolge – Wir werden sie später verwenden
  4. Speichern Sie diesen 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 Bash oder eine kompatible Shell (ksh, zsh sollte reichen …) Sie könnten auch eine Variable erhöhen, z stash_$((i++)) wenn Ihre Shell dies nicht unterstützt ${param//pattern}

Jetzt im neuen Repo für jede Referenz:

  1. Rufen Sie die Referenz aus dem alten Repo ab (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 Verweis und verwenden Sie den Betreff dieses Verweises als Stash-Nachricht.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done

1001910cookie-checkExportieren Sie einen Stash auf einen anderen Computer

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy