2014-05-07 141 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 

后我刚刚添加了一个远程指向一个空的远程存储库并推送到那里。