Bunu yapmak için basit (ancak yavaş) bir yol, git filter-branch
ve --prune-empty
. Başka hiçbir filtre kullanılmadığında, başka hiçbir işlem değiştirilmeyecek, ancak boş olanlar silinecektir (bu, sonraki tüm işlemlerin yeni üst kimliklere sahip olmasına ve dolayısıyla da "geçmişi yeniden yazmasına" neden olacaktır. hg'den git öğesine aktar, ancak diğerleri zaten bu depoyu kullanıyorsa çok önemli bir şeydir).
Filtre dallı tüm olağan uyarılara dikkat edin. (Ayrıca, bir yan not olarak, bir "boş taahhüt" aslında önceki işlemle aynı ağacın olduğu bir şeydir: hiç bir dosyaya sahip olmaması değil, aynı modda, aynı modlara sahip olması, ve, üst taahhüt olarak. Bu her git mağazaları komple anlık değil birinden farklılıklar sonraki taahhüt, taahhüt çünkü aynı içeriği budur.) İşte
yerlerde bir sürü gizler küçük bir örnektir sen meraklısı şeyler yapabilir:
$ ... create repository ...
$ cd some-tmp-dir; git clone --mirror file://path-to-original
(Bu ilk klon adım güvenliği içindir: bu yeni bir klon r üzerinde başlatmak için her zaman iyidir, böylece filter-branch
oldukça yıkıcı olabilir orijinalinden farklıdır. --mirror
de bu kopyada yansıtılır tüm dalları ve etiketleri demektir kullanma)
$ git filter-branch --prune-empty --tag-name-filter cat -- --all
(Şimdi bir potansiyel olarak çok uzun süre beklemek;. Yöntemlerine belgelere bakın yukarı biraz bu hızlandırmak için)
$ git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
.
(Bu adım, belgelerin dışına kopyalanır: filtreyi çalıştırmadan önce tüm orijinal dalları atar. Başka bir deyişle, filtrelemeyi kalıcı hale getirir. Bu bir klon olduğundan, filtre gittiyse bile mantıklı bir şekilde güvenlidir. yanlış.)
$ cd third-tmp-dir; git clone --mirror file://path-to-filtered-tmp
(Bu filtreleme adımlar hiçbir artık nesnelerle, süzülmüş kopyanın temiz, güzel sıkıştırılmış kopyasını yapar.)
$ git log # and other commands to inspect
filtrelenmiş klonun klonu iyi olduğundan emin olduktan sonra, size Filtrelenmiş klona gerek yoktur ve ilk klonu ilk klonun yerine kullanabilir. (Yani, nihai klon ile "gerçek orijinal" yerini alabilir.)
Nasıl kullanacağına dair bir örnek gösterebilir misin?İstek hakkında özür dilerim ama git – Greeso
Thaks için yeniyim, beni kurtardın. Şimdi üzerinde çalışacak. – Greeso