2012-03-17 14 views
9

Dla moich ciągłych kompilacji integracyjnych, chcę się upewnić, że żadne niepotrzebne pliki nie zostały zdeponowane w mojej piaskownicy git i żaden z plików nie został nieumyślnie zmieniony.Jaki jest najskuteczniejszy sposób uzyskania czystej piaskownicy git?

Wiem o git reset --hard HEAD, a to rozwiązuje część problemu. Ale domyślam się, że chcę usunąć wszystkie niepotwierdzone i zignorowane pliki. Mogłem to zrobić w sposób brutalny i po prostu:

rm -rf * 
git checkout -f 

Ale musi być bardziej skuteczny sposób to zrobić. Jakieś pomysły?

+2

'git zresetować --hard HEAD' +' git czyste -d -f' ? – madth3

+0

@ madth3, dziękuję, myślę, że rzeczywiście działa! – mpontillo

Odpowiedz

12

(Expanded dla potomności)

Twój problem może być podzielona na dwie części: Wracając zmodyfikowanych plików do stanu na ostatni popełnić i usuwając wszelkie dodatkowe pliki, które nie należą w repozytorium:

git reset --hard HEAD 

odbędzie pliki z powrotem do stanu mają w HEAD, usuwając wszelkie modyfikacje (nawet gdyby były etapem być zaangażowani)

git clean -f -d -x 

usunie wszelkie nieśledzone pliki lub katalogi, w tym zignorowane pliki (dzięki @Jefromi)

+0

Dzięki; Zapomniałem o poleceniu 'git clean'. Wiedziałem, że otrzymuję deja vu, kiedy pisałem to pytanie. =) – mpontillo

+0

Cóż, częściej używam polecenia 'reset', ale szukanie" czystego ", aby spełnić twoje wymagania było łatwe. – madth3

+1

Będziesz także chciał użyć '-x' z git-clean; to sprawia, że ​​usuwa również zignorowane pliki. Może to być znaczące, jeśli te zignorowane pliki są produktami pośrednimi, a proces budowania nie jest doskonały. – Cascabel

-1

Czy nie jest oddzielnym klonem repo dla CI lepszego rozwiązania?

Wystarczy pobrać | klon z pracujących-repo wszystkie zmiany popełnione przed CI-pracy (bez żadnych artefaktów i lokalnymi zmianami)

+0

Co masz na myśli? "oddzielny klon"? Mówimy gigabajtami, więc nie chcę ponownie klonować za każdym razem. – mpontillo

Powiązane problemy