2013-08-01 18 views
8

Dokonuję migracji repozytorium z svn do git.Usuń wiele plików z gałęzi filtra git

W tym ostatnim kroku chcę usunąć mnóstwo plików, które nie są potrzebne z historii.

Próbuję następujące polecenie:

git filter-branch --prune-empty --index-filter \ 
    "for file in $(cat files); do git rm -rf --cached --ignore-unmatch ${file}; done" -f 

Ale ona mówi, że lista jej argumentów jest zbyt długi.

mógłbym przepisać to tak:

for file in $(cat files); do 
    git filter-branch --prune-empty --index-filter \ 
    "git rm -rf --cached --ignore-unmatch ${file}" -f 
done 

Ale to będzie działać filtr rozgałęzienia ton razy, a historia jest długa .. tak, zajęłoby zbyt wiele czasu.

Czy istnieje szybszy sposób filtrowania gałęzi usuwając wiele plików?

+0

czy możesz rozważyć podzielenie git podczas svn 2 git; Zasadniczo pytam o refaktoryzację repozytorium – forvaidya

+0

możliwy duplikat [New repo z skopiowaną historią tylko obecnie śledzonych plików] (http://stackoverflow.com/questions/17901588/new-repo-with-copied-history-of-only- obecnie-śledzone-pliki) –

+0

Zrobiłem to. Ale repozytorium jest wciąż zbyt duże. Moi współpracownicy używali plików binarnych do SVN, takich jak jBoss, JDK i inne rzeczy ... prawdziwy bałagan .. – caarlos0

Odpowiedz

5

Polecam używanie The BFG, prostszej, szybszej alternatywy dla git-filter-branch specjalnie zaprojektowanej do usuwania niechcianych plików z historii Git.

Wspomniałeś w your comment że pliki problemowe są na ogół duże pliki binarne i BFG ma określoną opcję obsługi tego - należy uważnie śledzić BFG za usage instructions, ale część rdzenia jest właśnie to:

$ java -jar bfg.jar --strip-blobs-bigger-than 10M my-repo.git 

Wszystkie pliki o rozmiarze przekraczającym 10 MB (które nie są w Twoim najnowszym zatwierdzeniu) zostaną usunięte z historii repozytorium Git. Następnie można użyć git gc oczyścić z dala martwe dane:

$ git gc --prune=now --aggressive 

BFG wynosi zazwyczaj co najmniej 10-720x szybciej niż bieganie git-filter-branch i ogólnie łatwiejsze w użyciu.

Pełny opis: Jestem autorem BFG Repo-Cleaner.

+0

W końcu czekam ... ale ponieważ jest to jedyna odpowiedź, sprawdziłem to jako poprawne. Dzięki – caarlos0

+0

Nie, nie użyłem tego ... Czekam na koniec ... – caarlos0

+1

Jest to bezużyteczne dla dużej liczby bardzo małych plików. Czy jest tu także "--aggressive"? Zobacz [nieszczęścia "git gc -aggressive" (i jak działają delta git)] (https://metalinguist.wordpress.com/2007/12/06/the-woes-of-git-gc-aggressive-and- how-git-deltas-work /). – jpmc26

Powiązane problemy