Git Shelve gegen Stash

273

Ich bin mit dem shelveAspekt von Git sehr unbekannt . Wenn stashverwendet wird, um unfertige Arbeiten beiseite zu legen, was ist shelvedann? Wofür würden Sie es verwenden?

Zum Beispiel bei Update Project (aus dem VCS-Menü)

Geben Sie hier die Bildbeschreibung ein

man wird bekommen (in Idee 2019.2)

Geben Sie hier die Bildbeschreibung ein

Edgar Martinez
quelle
13
shelveist kein Git-Befehl. Was ist der Kontext für diese Frage, woher kommen diese Begriffe? shelveexistiert in einigen anderen Tools, ist aber nicht Teil von git.
Jonah
2
Git Stash ähnelt shelvein bzr, hg usw. Beziehen Sie sich auf ein Git-Interoperabilitätspaket?
Dr. Robertz
3
mehr positive Stimmen als die akzeptierte Antwort wahrscheinlich bestätigen, diese Frage ist gültig und der Begriff "Shelve" wird ebenso missverstanden wie ein Git-Befehl. Danke für die Frage, dies war auch mein Zweifel (auch von IDEA).
PravyNandas

Antworten:

264

git shelve existiert nicht in Git.

Nur git stash:

  • Wenn Sie den aktuellen Status des Arbeitsverzeichnisses und des Index aufzeichnen möchten, aber zu einem sauberen Arbeitsverzeichnis zurückkehren möchten.
  • Dadurch werden Ihre lokalen Änderungen gespeichert und das Arbeitsverzeichnis auf das HEAD-Commit zurückgesetzt.

Sie hatten ein 2008 altes Projekt- Git-Regal , um Änderungen in einem Zweig zu isolieren, aber das wäre heutzutage nicht sehr nützlich.

Wie im Intellij IDEA-Shelf-Dialog dokumentiert , ist die Funktion " Shelving and Unhelving " nicht mit einem VCS (Version Control System Tool) verknüpft, sondern mit der IDE selbst, um ausstehende Änderungen, die Sie noch nicht in der Änderungsliste festgeschrieben haben, vorübergehend zu speichern.

Beachten Sie, dass Sie seit Git 2.13 (Q2 2017) jetzt auch einzelne Dateien speichern können .

VonC
quelle
72
Es stellte sich heraus, dass ich das Konzept falsch verstanden habe. Ich dachte, es wäre ein Git-Befehl, obwohl es sich tatsächlich um eine Drittanbieter-Sache von IntelliJ IDEA handelt. Ich konnte die Git-Dokumente dafür nicht finden und dachte, ich hätte etwas vermisst. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez
2
Ihr Doc-Link zeigt an, dass "Regale" eine Reihe von Änderungen (Patches) sind, die nur von IntelliJ IDE verwaltet werden. Vermeiden Sie also Regale.
barbara.post
2
@ Jerry Kinnregal ist besser als Stash in Ihrem Fall. Ich wünschte, das Regal wäre in Git vorhanden. Webstorm saugt den RAM aus. Es wäre nützlich, wenn Git es hätte, könnten wir es in cmd-Zeile
ausführen
2
Es gibt einen häufigen Anwendungsfall, den Regale haben, den der Vorrat nicht anspricht - den Umgang mit problematischen Praktiken von Mitarbeitern / Unternehmen. Es ist möglich, dass vollständiger Müll zu Ihrem Repository hinzugefügt wird und dass er nicht koscher ist, um ihn wegen des Wahnsinns von jemandem zu "reparieren". Die Alternative ist so etwas wie, git stash && <your actual command> && git stash popaber das ist scheiße. Auto-Shelve und Apply ist näher an dem, was wir brauchen.
Smaudet
1
@VonC ähnlich nicht gleich - Ich habe einen Anwendungsfall, in dem die von mir verwendeten Projekte Einstellungen haben, die ich nicht festschreiben kann, weil sie nicht Standard sind. Und ein halbes Dutzend anderer Anwendungsfälle, auf die ich gestoßen bin, beinhalten Dinge wie das Erfordernis, Build-Dateien usw. für die lokale Entwicklung zu ändern, im Vergleich zu dev / test / prod.
Smaudet
187

Bei der Verwendung von JetBrains-IDEs mit Git werden neben dem Ein- und Auslagern auch Aktionen zum Ein- und Auslagern unterstützt. Diese Funktionen haben viele Gemeinsamkeiten: Der Hauptunterschied besteht in der Art und Weise, wie Patches generiert und angewendet werden. Shelve kann entweder mit einzelnen Dateien oder Bündeln arbeiten von Dateien, während Stash nur mit einer ganzen Reihe geänderter Dateien gleichzeitig arbeiten kann. Hier sind einige weitere Details zu den Unterschieden zwischen ihnen. "

Yekver
quelle
10
Es scheint, dass das Regal flexibler ist als Git Stash .
Dmitry Davydov
12
@DmitryDavydov Es gibt, git stash -pwas beide übertrumpft. Leider nur in der Kommandozeile.
The Vee
1
@TheVee Ja, es ist sehr ähnlich zu Regalen in Bezug auf Funktionalität, danke für Infos.
Dmitry Davydov
10
Eigentlich seit Git 2,13 (Q2 2017) Sie einzelne Dateien bunkern können ... mehr lesen
kyb
5
Ich fand Shelve sehr nützlich, wenn Sie einen Patch mit Änderungen haben, den Sie jedes Mal anwenden möchten, wenn Sie beispielsweise automatisch Dokumentation generieren möchten. Shelve erstellt eine Datei in .idea / shelve und Sie können sie Ihrem VCS hinzufügen und für Ihr gesamtes Team freigeben, damit diese diese Änderungen anwenden und dieselben Aufgaben ausführen können.
Ingkevin
63

Zusätzlich zu früheren Antworten gibt es eine wichtige Anmerkung für mich:

shelveJetBrains ist es, Produkte Merkmal (wie WebStorm, PhpStorm, PyCharmusw.). Es legt zurückgestellte Dateien in ein .idea/shelfVerzeichnis.

stashist eine der gitOptionen. Versteckte Dateien werden unter dem .gitVerzeichnis abgelegt .

Valex
quelle
2
Vielen Dank für die Klärung dieser kritischen Frage.
AmerllicA
4

Ich würde es vorziehen, Änderungen zurückzustellen, anstatt sie zu speichern, wenn ich meine Änderungen nicht an anderer Stelle teile.

Stashing ist eine Git-Funktion und bietet Ihnen nicht die Möglichkeit, bestimmte Dateien oder Änderungen in einer Datei auszuwählen. Shelving kann das, aber dies ist eine IDE-spezifische Funktion, keine Git-Funktion:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen, kann ich festlegen, welche Dateien / Zeilen in mein Regal aufgenommen werden sollen. Beachten Sie, dass ich das nicht mit Verstecken machen kann.

Beachten Sie, dass die Verwendung von Regalen in der IDE die Portabilität Ihrer Patches möglicherweise einschränkt, da diese Änderungen nicht in einem .git-Ordner gespeichert werden.

Einige hilfreiche Links:

Hamza Belmellouki
quelle