使用BFG后,Git存储库只会变得更大

时间:2015-05-15 07:11:26

标签: git git-rewrite-history bfg-repo-cleaner

我们目前正在将SVN回购迁移到GIT(托管在bitbucket)。 我使用subgit将我们所有的分支/历史导入到我本地(Windows)PC上的裸仓库中。

回购非常大(导入后为7.42 GB)这是因为它还包含有关SVN的信息,例如修订号,以便提供在Git和SVN之间进行双向同步的方法(我只感兴趣于单向SVN到GIT)。

我创建了导入的裸仓库的本地克隆,并将所有分支推送到bitbucket。 几个小时后(!),回购完全上传。 BitBucket现在给了我关于回购规模的警告。我检查了尺寸,它是1.1GB。这不像导入的裸机那么大,但仍然很大,有一个快速的存储库。

在使用BFG之后,我设法在裸仓库上使用这些命令删除了soms大型DLL / SQL导出文件(我只使用克隆来推送而没有所有与svn相关的引用):

java -jar bfg.jar --delete-files '{''specialized 2015''','''specialized,''insert-pcreeks''}.sql' --no-blob-protection

java -jar bfg.jar --delete-files 'Incara.*.dll' --no-blob-protection Incara.git

git reflog expire --expire=now --all && git gc --prune=now --aggressive

这需要一段时间,之后git_find_big.sh脚本不再显示这些大型sql文件。但是在把东西推回到bitbucket之后(作为一个新的回购,而不是强力推动)它只会变得更大(1.8GB)

您能为这种行为提供可能的解释吗?

我不知道它是否重要但我们在svn中使用了非标准分支/标签模型。这导致分支如下: /refs/heads/archive/some/path/to/branch。这些分支似乎工作正常,删除它们也不影响大小。

除了这些问题,我注意到我在git_find_big.sh输出中显示了一些XML文件:

size,pack,SHA,location 12180,1011,56731c772febd7db11de5a66674fe6a1a9ec00a7 repository/frontend.xml 12074,1002,0cefaee608c06621adfa4a9120ed7ef651076c33 repository/frontend.xml 12073,1002,a1c36cf49ec736a7fc069dcc834b784ada4b6a06 repository/frontend.xml 12073,1002,1ba5bd92817347739d3fba375fc42641016a5c1d repository/frontend.xml 12073,1002,e9182762bfc5849bc6645fdd6358265c3930779f repository/frontend.xml 12073,1002,dff5733d67cb0306534ac41a4c55b3bbaa436a2e repository/frontend.xml 12072,1002,8ee628f645ce53d970c3cf9fdae8d2697224e64c repository/frontend.xml 12072,1002,1266dee72b33f7a05ca67488c485ea8afc323615 repository/frontend.xml

这些文件包含我们正在使用的网络平台的前端逻辑,确实非常大。 但他们应该被视为文本吗?因此,我不明白为什么它们在上面的输出中显示为单独的对象。我是对的,这不应该发生吗?

SVN导入也导致了一些空提交(例如,当SVN创建或移动分支时,它需要新的提交)。我想这些只能使用filter-branch删除?

抱歉,我有很多问题! 有人可以帮我这个吗?

谢谢,

皮特

2 个答案:

答案 0 :(得分:2)

我已经在您的问题评论中要求提供更多诊断信息,这对于对主要部分给出合理答案是必要的,但对于您的次要问题(Stackoverflow鼓励您单独提出,顺便提一下!) ,这里有一些指示:

  

除了这些问题,我注意到我出现了一些XML文件   git_find_big.sh输出:   [剪断]

     

这些文件包含的前端逻辑   我们正在使用的网络平台,确实很大。但他们应该   对待文本吧?因此,我不明白他们出现的原因   上面输出中的单独对象。我是对的,不应该这样   发生?

Git根据文件内容(SHA哈希)分配id,并且就此而言,不关心你的文件是否是文本 - 如果文件稍有不同,它们的id不同,并将单独存储(Git 可能在引擎盖下进行增量压缩,但这不会阻止文件被定义为逻辑上分离)。因此,git_find_big.sh输出中不同版本的同一文件不止一次出现就不足为奇了。

  

SVN导入也导致了一些空提交(例如   SVN创建或移动需要新提交的分支。我想这些   只能使用filter-branch删除?

是的,BFG并不是开箱即用的。但是,filter-branch 做的一项任务是合理地快速完成(即使使用起来很繁琐)。

答案 1 :(得分:0)

(我在运行BFG之后)增加了程序包大小,最终由于git版本2.18时代版本程序包问题而出现。使用2.19的同事没有问题,我可以在2.19中找到错误修复说明。