git存储区中的内务处理

时间:2018-11-22 11:34:18

标签: git

我有一个很大的Subversion存储库(> 200,000次提交),我们最近已将其迁移到git。

这些年来,许多人犯了一些小错误,例如添加iso或msi程序包,添加不应添加的文件夹等。我们通过删除文件/文件夹来清除它并提交。存储库增加了,但这不是问题,因为SVN进行了良好的稀疏签出。

现在,在git上,客户端需要提取整个历史记录,本地克隆现在约为50GB。是时候整理房间了……

是否可以从历史记录中删除过去曾经删除过的所有文件? 还是创建一个新的仓库,并将所有在最近一次提交中存在的文件移过来?

我使用了git filter-branch命令,该命令很有帮助。但仅对于那些文件,我知道其路径。 我还使用git log --diff-filter=D --summary来获取所有删除的列表,但是有数千个……

好的,最后,我可以简单地启动一个新的存储库并复制其中的最新文件。这样,我将失去历史记录,但是可以在需要时将原始的大存储库保留为查找历史记录的存档存储库。

我真的希望有更好的方法...

1 个答案:

答案 0 :(得分:0)

我发现在迁移到git后很难做到这一点。但我可以做到。

我这样做了:

svnadmin dump …

创建转储文件。

svndumpfilter exclude …

排除我不再需要的所有东西。 为了获得包括删除项在内的存储库的完整列表,我这样做:

svndumpfilter exclude "*" …

有趣的是,svndumpfilter列出了在结构化排序输出中排除的所有文件。由于我排除了所有内容,所以有了完整的目录。

我运行了svndumpfilter几次,以删除所有不需要的东西。然后将Subversion存储库重新导入为新存储库,然后使用它迁移到git。