2012-04-11 8 views
32

Właśnie stworzyłem repozytorium mercurial stworzone z heterogenicznych ekosystemów innych repo. Zanim opublikuję go swoim współpracownikom, chcę go wyczyścić jak najwięcej. W tym celu chciałbym całkowicie usunąć kilka dużych starych plików z historii (udawać, że nigdy nie istniały), więc repo będzie mniejsze.Jak usunąć duże pliki z historii w mercurial?

Czy to możliwe przy użyciu środka rtęciowego?

+8

Nie rozumiem zamkniętego głosowania "poza tematem"; to pytanie idealnie pasuje do tematu. –

+0

@ Graham, mówisz, że myślisz, że inżynierowie oprogramowania powinni używać kontroli wersji? To szalona rozmowa ... – sage

Odpowiedz

35

Sprawdź rozszerzenie convert, w szczególności opcję --filemap.

Włącz przez dodanie następujących do mercurial.ini:

[extensions] 
convert = 

Tworzenie mapy plików do wykluczenia:

exclude path/to/file1 
exclude path/to/file2 

następnie przekonwertować repo:

hg convert srcrepo destrepo --filemap <map> 

uwaga jest błąd w Mercurial 2.1.1 powodujący błąd z powyższym poleceniem:

initializing destination destrepo repository 
abort: invalid mode ('r') or filename 

Po prostu dodaj opcję --splicemap <nonexistent file>, aby rozwiązać problem.

+0

Dzięki za odpowiedź! Dokumentacja dla --filemap jest dość rzadka, czy miałbyś link wyjaśniający ją z nieco większą szczegółowością? –

+0

@static_rtti, zaktualizowana odpowiedź. –

+0

Wow, niesamowite! Dziękuję Ci bardzo. –