Jak usunąć wszystkie nieśledzone pliki z mojego katalogu roboczego w Mercurial?

207

Czy można usunąć wszystkie nieśledzone pliki z mojego katalogu roboczego? Powiedzmy, że dodałem kilka plików do mojego katalogu roboczego, nie dodałem ich za pomocą „hg add”, a teraz chcesz całkowicie pozbyć się tych nowych plików?

Korzystam z systemu Windows, chociaż korzystam z programu PowerShell, więc tutaj jest również możliwe połączenie rozwiązań.

Walentin Wasiljew
źródło

Odpowiedzi:

286

Dodaj rozszerzenie rtęci zwane oczyszczaniem . Jest dystrybuowany przez Mercurial.

To rozszerzenie dodaje polecenie „purge” do „hg”, które usuwa pliki nieznane Mercurialowi. tzn. nieśledzone pliki. Więc twoim poleceniem byłoby

hg purge

Nie jest domyślnie włączony, być może w celu uniknięcia przypadkowego usunięcia plików, które zapomniałeś dodać.

Aby zainstalować to rozszerzenie, dodaj je do pliku ustawień mercurial (.hgrc w systemie Unix, Mercurial.ini w systemie Windows)

[extensions]
purge = 

Aby tymczasowo włączyć to rozszerzenie, możesz użyć

hg purge --config extensions.purge= 
po prostu trudne
źródło
26
hg purge --allusunie wszystkie nieśledzone i zignorowane pliki. Jest to przydatne do czyszczenia kompilacji in-source
tacaswell
22
aby tymczasowo włączyć ext, możesz użyćhg purge --config extensions.purge=
Pykler
121

Właściwy sposób bez oczyszczania to:

hg st -un0 | xargs -0 rm
tonfa
źródło
1
@simplyharsh jest w ten sposób lepszy, czy po prostu uważasz, że działa mniej niż dodawanie rozszerzenia?
Yaakov Kuperman
3
@YaakovKuperman Wydaje mi się, że dodanie rozszerzenia to mniej pracy niż to polecenie (jednorazowe włączenie). Nie włączam przedłużania czyszczenia, ponieważ potrzebuję go rzadziej niż raz na dwa tygodnie. Nazywaj mnie też głupim, ale wpisanie tego polecenia daje mi wystarczająco dużo czasu na przemyślenie, zanim zrobię coś tak destrukcyjnego jak „oczyszczenie”.
prostu trudny
2
@simplyharsh, to ma sens, ale są dwa powody, dla których wybrałbym to samo. Po pierwsze, możesz wykonać czyszczenie hg - print i zobaczyć listę tego, czego się pozbędzie, zanim przeprowadzisz czyszczenie. Po drugie, jeśli zrobisz to w ten sposób, musisz być w katalogu głównym repozytorium, aby działało.
Yaakov Kuperman
1
@javawizard: To miło, dzięki czemu przemyślałem sposób działania hg. Działa to jednak tylko dlatego, że rm -rf *pomija pliki kropkowe i katalogi kropkowe, w tym .hg/. Z tego samego powodu każdy inny plik kropkowy (np. .Evil-settings) również przetrwa, a czyszczenie będzie lepsze.
dirkjot
2
Pamiętaj, że istnieje różnica w zachowaniu między tym, co znajduje „hg st -u” i „hg purge”. „hg st -u” NIE BĘDZIE odnajdywał niewyśledzonych pustych katalogów, podczas gdy „hg purge” BĘDZIE je znajdował (i usuwał). To może, ale nie musi być dla ciebie ważne.
Michael Kent,
19

Dzięki! Działa to również dla mnie w Powershell:

hg st -un | rm
Nikolaos Georgiou
źródło
2
xargs nie działa w PowerShell - jest to jedyna odpowiedź, która jest po wyjęciu z pudełka „przyjazna dla systemu Windows”
Nikos Athanasiou
zgodził się ... po drugie, że xargs nie działa w PowerShell ... czystka jest jednak opłacalną opcją
beauXjames
Pracował dla mnie :)
Naveen Kumar V
4
rm $(hg st -u)

... gdzie -u oznacza „nieśledzony”, możesz także wybrać inny stan.

Alex
źródło
4

Możesz użyć

hg purge --all

aby usunąć wszystkie zignorowane i nieśledzone pliki

(najpierw musisz zainstalować rozszerzenie czyszczenia, jak wyjaśniono w niektórych odpowiedziach)

Alex L.
źródło
3

Spróbuj wykonać następujące czynności:

hg st -un | xargs rm
Aleksiej Tenicki
źródło
2

To powinno załatwić sprawę:

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf
Kristian
źródło
2

jeśli nie chcesz używać czyszczenia:

rm $(hg st | grep ^? | awk '{print $2}')
Lew
źródło
0

Zakładając, że używasz systemu * nix, możesz uruchomić coś takiego:

rm `hg st | awk '/\?/ {print $2}'`

z katalogu głównego repozytorium rtęci.

Nie znam standardowego polecenia rtęciowego, aby osiągnąć to samo, ale wierzę, że jest o wiele więcej opcji wiersza polecenia, aby to zrobić. Jestem pewien, że istnieją „lepsze” rozwiązania i chętnie wysłucham innych sugestii.

Użyj tego polecenia ostrożnie, ponieważ nie zostało ono dokładnie przetestowane.

Filtr Heinricha
źródło