2013-08-01 23 views
8

Bir depoyu svn'den git'e geçiriyorum.Git filtre dalında çok sayıda dosyayı kaldırın

Bu son adımda, geçmişten gerekli olmayan tonlarca dosyayı kaldırmak istiyorum.

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

Ama argüman listesi çok uzun olduğunu söyler:

aşağıdaki komutu çalışıyorum. Çok fazla zaman alacağını,

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

Ama kere filtre şube ton çalışır ve tarih uzundur .. bu yüzden:

Böyle yeniden başladı.

Çok sayıda dosyayı silmenin daha hızlı bir yolu var mı?

+0

Temel olarak – forvaidya

+0

numaralı arşivin [sadece güncel olarak izlenen dosyaların kopyalanmış geçmişine sahip yeni bir repo] olası yinelemesini soracağım (http://stackoverflow.com/questions/17901588/new-repo-with-copied-history-of-only- şu anda izlenen dosyalar) –

+0

Bunu yaptım. Ama repo hala çok büyük. İş arkadaşlarım, JBoss, JDK ve diğer şeyler gibi SVN'ye ikili işlemek için kullanmışlardı ... gerçek bir karmaşa .. – caarlos0

cevap

5

Özellikle Git geçmişinden istenmeyen dosyaları kaldırmak için tasarlanmış git-filter-branch'a daha basit, daha hızlı bir alternatif olan The BFG'u kullanmanızı öneririz.

Sorunun dosyaları genellikle büyük ikili olduklarını your comment belirtilen ve BFG bu işlenmesi için belirli seçeneği vardır - dikkatlice BFG en usage instructions takip etmeli ama çekirdek kısmı sadece şudur:

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

10MB'nin üzerindeki tüm dosyalar (numaralı taahhütünüzde yer almayan) Git deposunun geçmişinden kaldırılacaktır. Daha sonra ölü verileri uzak temizlemek için git gc kullanabilirsiniz:

$ git gc --prune=now --aggressive 

BFG tipik olarak en az 10-720xgit-filter-branch çalışan daha hızlı ve kullanımı daha kolaydır.

Tam açıklama: BFG Repo-Cleaner'ın yazarıyım. Svn 2 git sırasında gitmeyi düşünebilir misiniz?

+0

Beklemekten bitiyorum ... ama bu tek cevap olduğundan, doğru şekilde kontrol ettim. Teşekkürler – caarlos0

+0

Hayır, kullanmadım ... Sona kadar beklemek için bekliyorum ... – caarlos0

+1

Bu çok küçük dosyalar için çok kullanışsız. Ayrıca, '--gresif' burada iyi bir fikir mi? Bkz. “Git gc –gresif” (ve git deltas'ın çalışması nasıldır)] (https://metalinguist.wordpress.com/2007/12/06/the-woes-of-git-gc-aggressive-and- nasıl yapılır git-deltalar-iş /). – jpmc26

İlgili konular