Was ist der Unterschied zwischen IntelliJs Shelve und Git Stash?

96

IntelliJ unterstützt Git-Stashes sowie einen eigenen integrierten Regalbefehl. Diese scheinen in Zweck und Nützlichkeit nahezu identisch zu sein. Was ist der Unterschied zwischen ihnen?

Daniel Compton
quelle
2
Mögliches Duplikat von Git Shelve vs Stash
Vadzim

Antworten:

63

Aus der IntelliJ- Dokumentation :

In der Git-Integration werden neben "Shelving" und "Unhelving" auch "Stashing" und "Unstashing" unterstützt. Diese Funktionen haben vieles gemeinsam. Der einzige Unterschied besteht in der Art und Weise, wie Patches generiert und angewendet werden.

  • Patches mit versteckten Änderungen werden von Git selbst generiert. Um sie später anzuwenden, benötigen Sie IntelliJ IDEA nicht.
  • Patches mit zurückgestellten Änderungen werden von IntelliJ IDEA generiert. Normalerweise werden sie auch über die IDE angewendet. Das Anwenden von Änderungen außerhalb von IntelliJ IDEA ist ebenfalls möglich, erfordert jedoch zusätzliche Schritte.
Daniel Compton
quelle
21
Nun, was sind die Vorteile von Regalen, da sie nur "weniger kompatibel" mit einfachem Git sind?
MaxiWheat
17
Es scheint, als wäre ein Regal nützlich, wenn Sie ein VCS verwenden würden, das keine native Stash-Funktion hat. Wenn Sie Git verwenden, sehe ich keine wirklichen Vorteile.
Daniel Compton
4
Die "wirklichen Vorteile" sind in der Antwort von id.bobr aufgeführt. Die Hauptsache für mich ist, dass ich auswählen kann, welche Dateien / Chunks gespeichert werden sollen, ähnlich wie beim Festschreiben.
Martin Melka
Seit Git 2.13 ist es möglich, einzelne Dateien mit zu verstauen git stash push.
Deric Lima
44

Sie sind ziemlich ähnlich, außer:

  • Sie können Regale nicht außerhalb der IDE verwenden, da dies die Funktion von Intellij ist.
  • Git Stash funktioniert nur mit dem gesamten Arbeitsverzeichnis und Index. Das Regal von IntelliJ kann mit einzelnen Dateien und Änderungslisten arbeiten (eine weitere Funktion von IntelliJ). Wie Sie zum Beispiel hier sehen können , ist es manchmal notwendig.
  • Idea hat eine bessere integrierte Unterstützung für Regale. Das Arbeiten mit Git Stash ist einfacher. Insbesondere können Sie Ihre Änderungen zurückstellen oder freigeben oder zurückgestellte Dateien im Fenster des Versionskontrolltools überprüfen.

Außerdem funktioniert das Regal meiner Meinung nach etwas schneller, insbesondere in einem großen Projekt, in dem viele Dateien geändert wurden.

Weitere Informationen finden Sie in der Dokumentation .

id.bobr
quelle
Ich finde es sehr nützlich, mit der rechten Maustaste auf ein Unveränderliches zu klicken, um es schnell zurückzustellen. Wie Sie anspielen, finde ich es etwas schneller.
Wikingersteve
3
"Git Stash funktioniert nur mit dem gesamten Arbeitsverzeichnis und Index" - das ist falsch. Git Stash kann auch einzelne Dateien und Ordner verstauen - zB:git stash -- foo/bar.txt
Chaoz
20

Ein klarer Vorteil von Intellijs Shelve gegenüber Git's Stash besteht darin, dass Sie mit Shelve Änderungen, die zu mehreren Repos gehören, in einer Änderungsliste speichern können. Bei Verwendung von stash müssten Sie jedes Repo einzeln verstauen / entstapeln. Dies ist sehr nützlich in einem großen Projekt mit mehreren Modulen (jedes mit einem eigenen Repo), bei denen eine bestimmte Feature-Arbeit mehrere Module (und damit mehrere Repos) umfassen kann.

riyasvaliya
quelle
0

Hier ist, was die Dokumentation sagt

Das Verstauen von Änderungen ist dem Regalen sehr ähnlich. Der einzige Unterschied besteht in der Art und Weise, wie Patches generiert und angewendet werden. Stashes werden von Git generiert und können innerhalb oder außerhalb von IntelliJ IDEA angewendet werden. Patches mit zurückgestellten Änderungen werden von IntelliJ IDEA generiert und auch über die IDE angewendet. Das Verstecken umfasst auch alle nicht festgeschriebenen Änderungen. Wenn Sie Änderungen an einem Regal vornehmen, können Sie einige der lokalen Änderungen auswählen, anstatt sie alle zu speichern.

Sagar
quelle