Git Shelve vs Stash

275

Bardzo nie znam shelveaspektu Git. Jeśli stashjest używany do odłożenia niedokończonej pracy, co shelvewtedy? Do czego byś go użył?

Na przykład w Aktualizuj projekt (z menu VCS)

wprowadź opis zdjęcia tutaj

dostaniesz (w Idea 2019.2)

wprowadź opis zdjęcia tutaj

Edgar Martinez
źródło
14
shelvenie jest poleceniem git. Jaki jest kontekst tego pytania, skąd pochodzą te terminy? shelveistnieje w niektórych innych narzędziach, ale nie jest częścią git.
Jonasz
2
shelveSkrytka Git jest podobna do tej w BZR, HG itp. Czy masz na myśli jakiś pakiet interoperacyjności git?
drRobertz
3
więcej głosów pozytywnych niż potwierdzona odpowiedź prawdopodobnie potwierdza, to pytanie jest prawidłowe, a termin „Półka” jest równie źle rozumiany jak polecenie git. Dziękuję, że pytasz, to także moje wątpliwości (również z IDEA).
PravyNandas

Odpowiedzi:

266

git shelve nie istnieje w Git.

Tylko git stash:

  • gdy chcesz zapisać bieżący stan katalogu roboczego i indeksu, ale chcesz wrócić do czystego katalogu roboczego.
  • który zapisuje twoje lokalne modyfikacje i przywraca katalog roboczy, aby pasował do zatwierdzenia HEAD.

Miałeś półkę git ze starego projektu z 2008 roku, aby wyodrębnić modyfikacje w oddziale, ale w dzisiejszych czasach nie byłoby to bardzo przydatne.

Jak udokumentowano w oknie dialogowym Intellij IDEA na półce , funkcja „ półki i półki ” nie jest powiązana z VCS (narzędzie Systemu kontroli wersji), ale z samym IDE, do tymczasowego przechowywania oczekujących zmian, których jeszcze nie wprowadziłeś na liście zmian.

Pamiętaj, że od wersji Git 2.13 (II kwartał 2017 r.) Możesz teraz także przechowywać poszczególne pliki .

VonC
źródło
73
Okazuje się, że źle zrozumiałem tę koncepcję. Myślałem, że to polecenie Git, podczas gdy w rzeczywistości jest to rzecz trzecia od IntelliJ IDEA. Nie mogłem znaleźć git docs, więc pomyślałem, że czegoś mi brakuje. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez
2
Twój link do dokumentu wskazuje, że „półki” to zestaw zmian (łatek) zarządzanych tylko przez IntelliJ IDE, rozłącz „skrytki”, które są standardowymi rzeczami zarządzanymi przez Git. Więc unikaj półek.
barbara.post
2
@ półka pod brodą jest lepsza niż schowek w twoim przypadku. Chciałbym, żeby półka była obecna w git. Webstorm wysysa pamięć RAM. Przydałoby się, gdyby git miałby to, moglibyśmy uruchomić go w linii cmd
digender Mahara
2
Istnieje powszechny przypadek użycia, w którym półka nie rozwiązuje problemu - dotyczy problematycznych praktyk współpracowników / firm. Jest możliwe, że kompletne śmieci zostaną dodane do twojego repozytorium i nie będą koszerne, aby je „naprawić” z powodu czyjegoś szaleństwa. Alternatywą jest coś takiego, git stash && <your actual command> && git stash popale to jest do bani. Automatyczne półki i aplikacje są bliżej tego, czego potrzebujemy.
smaudet
1
@VonC podobne nie to samo - mam przypadek użycia, w którym projekty, których używam, mają wymagane ustawienia, których nie można zatwierdzić, ponieważ „nie są standardowe”. I pół tuzina innych przypadków użycia, na które natknąłem się, takich jak konieczność modyfikowania plików kompilacji itp. Dla rozwoju lokalnego vs dev / test / prod.
smaudet
187

Podczas korzystania z JetBrains IDE z Git „oprócz ukrywania i odkładania obsługiwane są operacje„ ukrywania i odblokowywania ”. Funkcje te mają wiele cech wspólnych; główna różnica polega na sposobie generowania i stosowania poprawek. Półka może działać z pojedynczymi plikami lub wiązkami plików, podczas gdy Stash może działać jednocześnie z całą masą zmienionych plików. Oto kilka szczegółów na temat różnic między nimi. ”

Yekver
źródło
10
Wydaje się, że półka jest bardziej elastyczna niż skrytka git .
Dmitry Davydov
12
@DmitryDavydov Jest to, git stash -pco przebija oba. Niestety tylko w wierszu poleceń.
The Vee
1
@TheVee tak, jest bardzo podobny do półki pod względem funkcjonalności, dzięki za informacje.
Dmitrij Davydov
10
Właściwie od Gita 2.13 (Q2 2017) możesz przechowywać poszczególne pliki ... czytaj więcej
kyb
5
Uważam, że półka jest bardzo przydatna, gdy masz łatkę zmian, które chcesz zastosować za każdym razem, gdy chcesz na przykład automatycznie wygenerować dokumentację. Shelve utworzy plik w .idea / shelve i możesz go dodać do VCS i udostępnić go całemu zespołowi, aby mogli zastosować te zmiany i uruchomić te same zadania.
ingkevin
63

Oprócz poprzednich odpowiedzi jest jeszcze jedna ważna uwaga:

shelveto produkty JetBrains cechą (na przykład WebStorm, PhpStorm, PyCharmetc.). Przechowuje odłożone pliki do .idea/shelfkatalogu.

stashjest jedną z gitopcji. Umieszcza pliki ukryte w .gitkatalogu.

valex
źródło
2
Dziękujemy za wyjaśnienie tego krytycznego pytania.
AmerllicA
4

Wolę odkładać zmiany na później, niż je ukrywać, jeśli nie udostępniam ich innym osobom.

Ukrywanie jest funkcją git i nie daje opcji wyboru określonych plików lub zmian w pliku. Regały mogą to zrobić, ale jest to funkcja specyficzna dla IDE, a nie funkcja git:

wprowadź opis zdjęcia tutaj

Jak widać, jestem w stanie określić, które pliki / linie mają być uwzględnione na mojej półce. Zauważ, że nie mogę tego zrobić z ukrywaniem.

Uwaga: używanie półek w IDE może ograniczyć przenośność twoich łat, ponieważ zmiany te nie są przechowywane w folderze .git.

Kilka przydatnych linków:

Hamza Belmellouki
źródło