我使用git svn clone导入了一个非常古老的SVN项目。 问题是我拿起了那个repo的根文件夹,我已经导入了所有其他子项目(进入新的git repos),并且每个子文件都从SVN中删除了。 因此,在将根文件夹(包含最后8个子文件夹)导入一个git仓库时,还会导入完整仓库的所有历史记录(包括已删除的子项目历史记录)。
我做了几个命令来清理包文件,但没有成功。它总是571Mb。 唯一减少它的命令是:
git repack -a -d --depth=500 --window=1000 -f
谷歌搜索,我发现很多帮助文件被删除,或删除大blob历史记录,但不是已经消失的文件。
我使用以下命令创建了一个列表,其中包含我需要消失的所有已删除文件夹(此列表中只有顶级文件夹):
git log --diff-filter=D --summary | grep delete | cut -d" " -f5 | cut -d"/" -f1 | grep -v "\"" | sort | uniq > /tmp/tokill.txt
然后,我做了这个(经过一点编辑后,保留了2个历史记录删除文件夹):
git filter-branch --index-filter 'cat /tmp/tokill.txt | xargs git rm --cached --ignore-unmatch -r'
此时,日志有点重写。我不再能够列出已删除的文件。但即使重新包装,gc和/或修剪,包装仍然是571Mb大小。
我错过了什么? 任何帮助都是相关的。
最佳, 洛瓦托
2014-08-05新增
只是为了澄清一点:我已经保留了各个子项目的历史,因为我已经将它们迁移到git。之后,这些文件夹从svn中消失了。所以,我真的想摆脱历史,因为它不属于这个范围。我明白git很奇怪,但我想知道我能否做到。
我把一个巨大的SVN回购分成几个git回购,让每个人的生活变得更轻松。这个原始的SVN回购有6年,并且SVN提交了2 ^ 2,所以我不能一个一个地检查它是否会被删除。
关于大小,没有历史(包含大blob的历史)它不到1Mb。它只是一堆java代码,文档和一些图像。
(也许)正确的方法是首先将所有这些根文件夹移动到名为" last_project"的文件夹,然后svn-git克隆此" last_project",以及所有历史记录属于" /" (这意味着所有历史记录)将保留在SVN上。
在2014-08-05添加 - II: 部分解决方案
在回顾我的问题时,Stackoverflow开始提出我之前没有找到的其他类似问题,因为它们只是有点相关。其中一个是关于BFG工具。 对于磁盘上不再存在的文件,BFG工具不清楚"历史记录,但是对于大于X kb(某些人)大于X kb的文件,擦除了所有历史记录。然后,我的总回购大小现在是20Mb,Jenkins(和所有人)可以从现在开始以2秒的速度下载它。
http://rtyley.github.io/bfg-repo-cleaner/
我仍然拥有原始回购的裸照副本,以应用任何可能建议的解决方案。
在2014-08-06添加:
我必须完全消灭我的旧git repo,创建一个新的,他们推动新的重写回购。它现在正在工作。不是我想要的方式,而是工作。
答案 0 :(得分:2)
您好像希望过去存在的项目不再是从git中删除的存储库的一部分。
不幸的是,git没有这样的工作。因为这些项目是历史记录的一部分(也就是说,仍然存在分支/引用/标记在其历史记录中引用这些提交),所以它们将保持不变,因此与这些提交相关的对象也将存在。
完全删除它们的唯一方法是将它们从你的git历史中删除。如果您有一个引用它们的分支,您可以删除该分支或将其重新绑定,以便它不包含这些提交。无论哪种方式,git的垃圾收集都会启动并摆脱它们。
但是,你为什么要这样做? 571MB并不是特别大,您将完全删除历史记录。
另一种方法是:
git commit --allow-empty -m 'root commit'
)rebase -i
)再一次和fixup
您不想要的提交(这将基本上将所有这些提交合并为一个提交将删除所有已删除文件的效果,但对存在的文件所做的任何更改都将在历史记录中保留。)git gc
您的新存储库现在应该更小,并且原始的git-svn存储库应该不受影响。
有一个问题:你应该知道git-svn不会尊重原始svn存储库中的svn externals,因此如果你的svn存储库不使用externals,你只能信任git-svn repo。
<强>更新强>
只要保留相互依赖关系,就可以将子项目分开。例如:
In order to build Parent project version 45, you need:
version 2 of sub-project A
version 10 of sub-project B
...
version 30 of sub-project Z