Testowanie tego, co ma zostać zatwierdzone w haku przed zatwierdzeniem
Internet jest całkowicie zaśmiecony błędnymi i nieidealnymi odpowiedziami na to pytanie. To niefortunne, ponieważ można by pomyśleć, że byłoby to powszechną rzeczą, którą chciałbyś zrobić.
Problem: kiedy apre-commit
hak działa, repozytorium może nie być czyste. Więc jeśli naiwnie przeprowadzasz testy, nie będą one sprzeczne z tym, co popełniasz, ale jakikolwiek brud zdarza się w twoim drzewie roboczym.
Oczywistą rzeczą do zrobienia jestgit stash --keep-index --include-untracked
na początkupre-commit
igit pop
przy wyjściu. W ten sposób testujesz przeciwko (czystemu) indeksowi, który jest tym, czego chcemy.
Niestety, generuje to znaczniki konfliktów scalania, jeśli używaszgit add --patch
, (zwłaszcza jeśli edytujesz porcje), ponieważ zawartośćstash@{0}
może nie pasować do drzewa roboczego po zatwierdzeniu.
Innym powszechnym rozwiązaniem jest klonowanie repozytorium i uruchamianie testów w nowym tymczasowym. Są dwa problemy z tym: jeden z nich nie został jeszcze zatwierdzony, więc nie możemy łatwo uzyskać kopii repozytorium w stanie, który zamierzamy zatwierdzić (jestem pewien, że istnieje sposób, aby to zrobić , ale nie jestem zainteresowany bo :). Po drugie, moje testy mogą być wrażliwe na lokalizację bieżącego katalogu roboczego. Na przykład z powodu lokalnej konfiguracji środowiska.
Więc: Jak mogę przywrócić moje drzewo robocze do stanu, w jakim znajdowało się przedgit stash --keep-index --include-untracked
, bez wprowadzania znaczników konfliktu scalania i bez modyfikowania post-commitHEAD
?