2010-03-24 10 views
23

Jestem nowy w Mercurial i po oczyszczeniu folderu z obrazami w moim projekcie, mam mnóstwo plików pokazujących! w stanie "hg". Mogę wpisać "hg forget" dla każdego, ale musi być łatwiejszy sposób.Jak zapomnieć o wszystkich usuniętych plikach z Mercurialem

Jak zatem powiedzieć rtęci, aby zapomniały o wszystkich usuniętych (status =!) Plikach w folderze?

+0

Duplikat: http://stackoverflow.com/questions/2412239/how-to-do-mercurials-hg-remove-for- wszystkie brakujące pliki – Cullub

+0

Niezupełnie duplikat, chociaż rozwiązanie jednej z nich wymaga wylistowania plików, które nie pojawiają się w 'ls'. To pytanie pyta, jak oznaczać usunięte pliki jako usunięte hg. Oto jak * un * zaznaczyć wszystkie usunięte pliki hg. –

Odpowiedz

27

Jeśli jesteś również w porządku z dodawania plików, które istnieją i nie są ignorowane wówczas:

hg addremove 

będzie popularnym sposobem, aby to zrobić.

+2

To prawda, że ​​dodano niepotwierdzone pliki i oznaczono brakujące pliki jako usunięte w jednym skróconym poleceniu. +1 – VonC

+0

zdecydowanie poprawna odpowiedź tutaj – Jason

+0

Działa to również w przypadku rekursywnego przeglądania folderów, gdzie - jako zapomina -I musi być wykonane w katalogu plików do usunięcia. –

3

Można spróbować:

hg forget -I '*' 

w celu uwzględnienia wszystkich plików w swojej komendzie zapomnieć.

+3

należy zachować ostrożność, aby nie przechwytywać plików rozpoczynających się od kropki w bieżącym katalogu. –

+1

nic dla mnie nie zrobił: "Przerwij: nie określono plików" – stian

+0

Czy potrzebujesz \ * \ * zamiast *, aby spojrzeć poza katalog główny? ('hg help patterns') –

9

Z zestawu plików (Mercurial 1.9):

hg forget "set:deleted()" 

Generalnie, Linux lub Mac:

hg status -dn | while read file ; do hg forget "$file" ; done 

Lub, jeśli powłoka na to pozwala, jeśli nie ma zbyt wiele plików, a jeśli nazwy plików nie zawierać spacji ani znaków specjalnych, a następnie:

hg forget $(hg st -dn) 

i

1

Używając -d flagę statusu, który wyświetla brakujące pliki:

for file in $(hg status -d | cut -d " " -f 2); do echo hg forget $file; done

Uruchom ten w głównym katalogu repo, a jeśli jesteś zadowolony z wyników, usuń echo

Ma to dodatkową zaletę niż zaakceptowana odpowiedź , a nie wykonywanie jakichkolwiek dodatkowych prac, np. dodając kilka nieśledzonych plików.

+0

Otrzymuję 'nie ma takiego pliku lub katalogu' dla każdego z plików, prawdopodobnie ich brakuje. – Grzenio

0

więcej krótszy zamiast

for file in $(hg status -d | cut -d " " -f 2); do echo hg forget $file; done 

tym

hg status -d | cut -d " " -f 2 | xargs echo hg forget # test case 
hg status -d | cut -d " " -f 2 | xargs hg forget # real work 
Powiązane problemy