W Magit, jaka jest różnica między „skrytką” a „migawką”?

18

Instrukcja obsługi Magit zawiera dwa zestawy poleceń „ukrywania”: polecenia pisane małymi literami zapisują ukryty obraz , a polecenia pisane dużymi literami zapisują migawkę . Po skonsultowaniu się z Google i Stack Overflow i git-stash(1)stroną podręcznika nadal nie wiem, na czym polega różnica.

Co za różnica?

Norman Ramsey
źródło
1
Rozumiem, że stashrównież zresetuje (cofnie) zmiany i snapshotpozostawi zmiany w obszarze roboczym (może to być przydatne, jeśli zamierzasz zmienić kolejność zatwierdzeń przed wypchnięciem).
wvxvw

Odpowiedzi:

25

Zarówno warianty „ukryty”, jak i „migawka” tworzą te same obiekty ukryte. Różnica polega na tym, że po utworzeniu migawki ukryte zmiany nie są usuwane z plików w działającym drzewie i / lub indeksie. (Podobnie jak w przypadku robienia migawek przyjaciołom, którzy dobrze się bawią - to też nie powoduje ich zniknięcia ;-)

Jest to przewidziane jako swoisty mechanizm tworzenia kopii zapasowych. Załóżmy, że przeprowadzasz skomplikowane refaktoryzowanie i właśnie przetestowałeś, a zmodyfikowany kod nadal działa, ale jeszcze nie skończyłeś. Teraz byłby dobry moment, aby utworzyć migawkę, abyś miał do czego wrócić, jeśli zepsujesz ją później.

Oczywiście możesz po prostu utworzyć tymczasowe zatwierdzenie „wyczyść” bezpośrednio w gałęzi, nad którą pracujesz, aby to zrobić. Zwykle tak robię.

Możesz także zautomatyzować proces nagrywania prac w toku, włączając tryby czyszczenia . Mam te tryby włączone jako sieć bezpieczeństwa, ale nadal tworzę zatwierdzenia czyszczenia bezpośrednio w bieżącej gałęzi lub tworzę migawkę. Są łatwiejsze do pracy niż referencje wip.

Zauważ, że Magit ma własną implementację skrytki napisaną w Elisp. Było to konieczne, aby zaimplementować warianty migawki oraz warianty skrytek tylko dla drzewa roboczego i tylko dla indeksu. Git nie zapewnia żadnego z tych wariantów.

Tarsjusz
źródło