2014-05-07 107 views
1

情景:大Git倉庫(〜16K提交)設有多家分支機構,二進制文件等內<repo>/a/b的工具已經發展了這麼多,我想將它的代碼放在一個單獨的存儲庫中。我希望保留歷史。我只對一個分支的歷史和單個目錄內的代碼感興趣。移動目錄

這裏是我做過什麼:

$ git clone <old git repo> 
$ git remote rm origin 
$ git filter-branch --subdirectory-filter <directory I want> -- --all 

結果就是我想要的東西 - 〜80次的提交,一個分支約10的源文件。

問題:版本庫很大。 Git gc沒有多大幫助。

$ du -sh . 
904M . 

$ git gc && du -sh . 
617M . 

$ cd .. && mkdir tmp && cd tmp && git clone ../repo && du -sh repo 
615M repo/ 

我錯過了什麼?我怎樣才能將回購合理化?

+0

我的猜測是合併拉入不需要的變更集: - /你可以嘗試導出變更作爲補丁與歷史? –

回答

2

的Git documentation有一個解決大小問題:與

$ git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d 
$ git reflog expire --expire=now --all 
$ git gc --prune=now 
$ du -sh . 
2.1M . 

我也注意到,所有現有的標籤是不必要的和去除的(在上面跑前):

$ for t in $(git tag -l|xargs); do git tag -d $t; done 

後我剛剛添加了一個遠程指向一個空的遠程存儲庫並推送到那裏。