如何识别并可能删除SVN存储库中的大型二进制提交?

Inv*_*ion 14 svn fsfs

我正在使用一个超过3年的SVN存储库,包含超过6,100个提交,大小超过1.5 GB.我想减少SVN存储库的大小(我不是在谈论完整SVN导出的大小 - 我的意思是服务器上存在的完整存储库),然后再将其移动到新服务器.

当前存储库包含所有软件项目的源代码,但它还包含相对较大的二进制文件,例如:

  • 适用于许多第三方工具的完整安装程序.
  • .jpg和.png文件(这些文件是生活在同一文件夹中的未经修改的PSD导出).
  • Bin和Obj文件夹(然后'svn忽略'下次提交).
  • Resharper目录.

自添加以来,许多这些大型文件已被"SVN删除",这进一步造成了识别最大违法者的问题.

我想要:

  • 创建一个仅包含所有软件项目代码的新SVN存储库 - 复制的文件从旧存储库维护其SVN历史记录非常重要.
  • 从现有存储库中删除大型二进制提交和文件.

这些都可能吗?

Mat*_*nry 8

其他人是正确的svnadmin dump,等等.像这样的东西会让你粗略地指向修订版,为你的回购添加了大量数据,并且是以下候选人svndumpfilter:

for r in `svn log -q | grep ^r | cut -d ' ' -f 1 | tr -d r`; do
   echo "revision $r is " `svn diff -c $r | wc -c` " bytes";
done
Run Code Online (Sandbox Code Playgroud)

您也可以尝试这样的方法来查找添加了具有特定扩展名的文件的修订版(此处为.jpg):

svn log -vq | egrep "^r|\.jpg$" | grep -B 1 "\.jpg$"
Run Code Online (Sandbox Code Playgroud)


Oth*_*ide 4

您将必须使用svnadmin dump来获取当前存储库的转储文件,并可能使用svndumpfilter来处理转储文件。只要小心,您也可以手动修改转储文件。

这可能不是一项快速而容易的工作,但它是可以完成的。我已经做了类似的事情,只是对一个小得多的存储库。我有一个包含大约 150 个修订的存储库,占用了大约 600MB 的空间。

从当前存储库中进行转储,进行必要的更改并尝试将修改后的转储文件加载到新存储库中。然后检查新的存储库以确保一切仍然有意义(历史记录仍然正确,路径没有奇怪的变化,...)。