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ń.

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= 

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

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

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.


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)



2

To powinno załatwić sprawę:

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf

2

jeśli nie chcesz używać czyszczenia:

rm $(hg st | grep ^? | awk '{print $2}')

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.