2017-02-21 24 views
5
  • Mam toku prac niezakończonych
  • muszę przełączyć się na inny oddział jakiegoś pilnych prac
  • Jak mój obecny Work in Progress nie zostanie zakończone, nie chcę, żeby go popełnić. Używam git stash, aby odłożyć to na bok.

Dodatkowo chciałbym wykonać kopię zapasową tej zawartości na wspólnym dysku. Tylko dla bezpieczeństwa. Co to jest eleganckie rozwiązanie do archiwizowania zawartości ukrytej w pliku?Jak utworzyć kopię zapasową zawartości skrytki git?

Odpowiedz

9

można uzyskać poprzez uruchomienie pokazu diff polecenie:

git stash show -p > stash.diff 

To jest plik diff, które można używać jako kopię zapasową.

Później można stosować diff do istniejącego repozytorium:

git apply stash.diff 
# and potentially stash again: 
git stash 
+0

To pomaga !!!! – VinayVeluri

+0

@Zbynek 'git stash show' mówi tylko" MyProject/MyFile.scala | 34 +++++ "1 plik zmieniony, 34 wstawek (+). Jeśli wykonam kopię zapasową tego "raportu stanu" (który jest przechwytywany w pliku stash.diff zgodnie z instrukcją). Załóżmy, że mój dysk twardy ma problemy po wykonaniu kopii zapasowej. W jaki sposób stash.diff wie o faktycznej zawartości 34 wierszy, które napisałem w pliku MyFile.scala? – Polymerase

+0

@Polymerase: Przepraszam, przegapiłem '-p' (który jest domyślny dla' diff', ale nie dla 'stash'). Odpowiedź zaktualizowana. –

5

nie chcę popełnić to

Właściwie git stash działa poprzez dwie, popełnia (czasami) trzy , więc jeśli ukryliście swoją pracę, popełniliście może nawet nie wiedząc o tym. Ale nie ma nic złego przez większość czasu przy dokonywaniu tymczasowego zatwierdzenia. Wystarczy dodać swoją aktualną pracę, a następnie dokonać tymczasowy popełnić poprzez:

git commit -m 'WIP' 

Następnie można przesunąć swój oddział się do repozytorium, a które powinny służyć jako zapasowy. Po powrocie, aby zakończyć pracę, można zmienić, że tymczasowa popełnić poprzez:

git commit --amend 

Zapraszam do zmiany wiadomość do czegoś bardziej sensownego, ale w każdym przypadku wiadomość WIP może służyć jako przypomnienie.

Jeśli oddział, nad którym pracujesz, może być współużytkowany przez inne osoby, możesz przesłać swój oddział z tymczasowym zatwierdzeniem do innej lokalizacji jako kopię zapasową, np.

git push origin local_branch:some_other_location 
+0

+1 dla 'git commit --amend', @Tim, jest jak tymczasowy, który może być współdzielony z czymś takim jak e-mail i zastosować na innym komputerze i zatwierdzić? – VinayVeluri

+0

@VinayVeluri Spójrz na inną odpowiedź, która wydaje się rozwiązać ten problem. W każdym razie zawsze można dzielić się oddziałami, dlatego tymczasowe zatwierdzenie może być udostępniane tak samo jak każde inne zatwierdzenie. –

+0

To jest to, co zwykle robimy, sprawdzanie, czy mamy inny sposób. – VinayVeluri

2

Jak Tim Biegeleisen powiedział git stash faktycznie tworzy popełnić - po prostu nie porusza wszystkich swoich oddziałach na całym.

Możesz uzyskać dostęp do ostatniej ukrytej zawartości poprzez [email protected]{0} (od drugiej do ostatniej [email protected]{1}, itp. ... git stash list, aby wyświetlić pełną listę tego, do czego masz dostęp).

Najprostszym sposobem widzę zrobić zapas bardziej trwałe jest: utworzenie nowego oddziału:

$ git branch wip/adding/new/feature [email protected]{0} 

Teraz, z oddziałem wskazując na niego, to ukryty treść nie wygasną, będą transmitowane kiedy klonujesz lub pobierasz z tego repo, etc ...

Najprostszym sposobem tworzenia kopii zapasowych repo jest to klonowanie:

$ cd path/to/external/drive 
$ git clone my/repo 

# you can then update your backup by running : 
$ git fetch   # from the clone 

to zapisze wszystkie oddziały i znaczniki zdefiniowane w oryginalnym repo.

+0

dzięki, ale to jest przesada tylko po to, aby zaoszczędzić tymczasową pracę przez krótki czas. Zawartość zapasów może wynosić 1K. Wykonanie kopii zapasowej całego repo może być 1 milion razy większe. Przepraszam za mój nowicjusz, ale myślę, że jeszcze łatwiej jest po prostu zatwierdzić moją pracę tymczasową i cofnąć ją później. – Polymerase