我正与一个SVN存储库,为3岁以上,包含了超过6,100名提交并超过1.5GB。我想要减小SVN库(我不是在谈论大小的一个完整的SVN出口-我的意思是全储存库,因为它将存在于服务器)之前移动到一个新的服务器。

目前的储存库包含的源代码对我们所有的软件项目,但它也包含相对较大型的二进制文件没有意义的,如:

  • 全部安装一个数第3个缔约方的工具。
  • .jpg&.png文件(这是未经修改的出口量警司警诫计划,生活在同一个文件夹)。
  • 站和Obj文件夹(这是后svn忽略'的下一次提交).
  • Resharper目录。

一些大型的文件已被'SVN删除',因为它们加入,创造进一步的问题的鉴别的溶最大的罪犯。

我想到:

  • 创建一个新的SVN库,其中仅包含的代码为所有的软件项目-这是 真的很重要 复制的文件保持其SVN历史上从旧的储存库。
  • 除了大型的二进制提交的文件从现有的储存库。

是的这可能吗?

有帮助吗?

解决方案

你会有用 更倾倒 得到一个垃圾场文件的当前储存库和可能的 svndumpfilter 到处转的文件。你也可以手动修改转储文件只要你小心。

它可能不会是一个快速和容易的工作,但这是可以做到的。我已经做了类似的东西,只要一个更小的储存库。我有一仓库拥有约150修订了约600MB.

做一个垃圾场从当前的储存库,作必要的修改,并试图载的修改转储文件在一个新的储存库。然后检查的新存储库,以确保一切仍然是意义(历史仍然是正确的,没有奇怪的变化的路径,...).

其他提示

一面是对的 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

你也可以尝试这样的事情找出的修正添加的文件有一个特别的扩展(在这里,.jpg):

svn log -vq | egrep "^r|\.jpg$" | grep -B 1 "\.jpg$"

如果你被删除的文件存储库,使用"SVN删除",你实际上并没有被删除的文件。这将是美丽的SVN.一旦文件加以存储库,它是永远存在(除非使用转储&载)。在"删除"的文件,实际上创建一个新的修订,删除,但该文件继续存在以前的修订。

我已经做了一些倾倒和下载,但从更大的储存库。约60,000(!!!) 修订。它花了时间,但在结束时,之后小心装入,储存库是再次建。

你唯一的办法就是列出修订的文件增加、修改和删除。然后把修订之间的时间,并载他们以正确的顺序。要知道,有没有犯错误的余地。如果你犯了一个错误,你将不得不重新开始。转储和载荷从一开始。

我建议,如果大型的文件是这样一个问题,可以考虑创建一个新鲜库没有的历史。保持老一历史比较,并开始从新鲜。

好运气。

如果你只需要找到有问题提交 你有访问的服务器托管的储存库:看起来对大型文件中db/转子目录的储存库(假定它使用的版本格式)。

不是这只是一个不同的问题,与一个额外的步骤?I.e。你需要找到文件,你认为是大型和二元,然后检查,如果他们事实上管理的SVN或已经在本地生成的(或进口的并行资产系统,如果它已经在的地方)。

因此,只要找到该文件,然后再做 svn info 在他们找到了如果他们的部分储存库。

只是一个小小的思维,你说的当前状态存储库(目前的头)是良好的,即大型的二进制文件已经svn删除'ed过去。因此,问题纯粹是大小的仓库?

我知道你说的是你想保留的所有犯下的历史,但作为一种选择,你能做两个堆放场,一个为整个修订历史和当前的头修订。

如果你把完全转储到一个DVD例如,你将提供的数据如果你需要它,但是你可以那么删除整个储存库和svn载的修订,留给你一个小型清洁储存库。

它也有可能倾倒来自一个具体的修订起,而不只是头,因此,例如,你可以保持过去3个月的修订和倾倒一切的老年,一个DVD。...

拟订上面的答复,这里是什么样的具体工作对我来说:

svnadmin create new-repo
svnadmin dump old-repo | svndumpfilter exclude --pattern '*.exe' '*.jpg' '*.png' | svnadmin load new-repo

你也许可以排除你的 ObjBin 目录的通过将它们加入 svndumpfilter 命令–我没有尝试。

此外,颠复的 fsfs-stats 程序(新的在颠复1.8,取而代之的是在通过1.9 svnfsfs stats)可能会有助于定量的文件类型和特定文件的填补了你的存储库。

这可能是有用的比较仓库之后:

colordiff -u <(svn log -v file:///.../old-repo ) <(svn log -v file:///.../new-repo)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top