我的.svn存储库变得非常大(5 GB),我们真的不需要回到目前为止。 (找到6个月或一年)。
我还有8 GB .svn文件夹位于从存储库中检出的目录的根目录。
我甚至会满足于#34;重新开始"并保留旧SVN的副本6个月或一年,然后最终按How to backup and restore all the source code in svn?
删除它答案 0 :(得分:1)
你的.svn
存储库是什么意思?
.svn
文件夹主要用于管理签出版本,并且与存储库服务器的历史记录完全无关。
.svn
目录包含的信息包括客户端上的文件更改,签出人员以及URL。在1.7版本的Subversion版本中,它甚至保留了签出目录的完整副本。这样,您可以执行差异以查看您所做的更改,而无需与服务器通信。这意味着如果您检出100Mb的文件,那么您的.svn
目录也将大约为100Mb。
如果您正在谈论客户端,您只需要检查您需要处理的URL部分。例如,假设您拥有标准的Subversion存储库设置,如下所示:
http://%REPO_URL%/trunk
http://%REPO_URL%/tags
http://%REPO_URL%/branches
在trunk
下,您拥有所有项目:
http://%REPO_URL%/trunk/project_foo
http://%REPO_URL%/trunk/project_bar
http://%REPO_URL%/trunk/project_fubar
如果我只在http://%REPO_URL%/trunk
工作,我不必结帐project_foo
。我当然不想结账http://%REPO_URL%
这将给我我的整个存储库,包括完全检出的所有分支和标签。 (而且我见过这样做的人)。
Subversion客户端不会检出整个存储库,而只检查项目的单个版本。如果你检查出你需要什么,你可以拥有一个数百TB的存储库,但是你工作的副本可能不超过千兆字节。
我看到的一个问题是人们检查二进制代码 - 第三方库或编译代码。此代码不应该是您的存储库的一部分。如果您使用Java,请使用Maven,Gradle或Ant与Ivy来管理这些第三方库以及您自己的项目可能使用的构建对象。如果您使用.NET,请使用NuGet执行相同的操作。
Subversion以diff格式存储文件。如果一个版本与另一个版本不同,则只有该行更改存储在Subversion中。虽然单个源更改可能是一行,但它可能会对构建的文件产生重大影响。二进制文件占用Subversion存储库的90%以上的空间并不罕见。也就是说,由于二进制文件的原因,大小约为500兆字节的存储库会膨胀到超过50千兆字节。
更糟糕的是,二进制文件很快就会过时,Subversion没有简单的方法来删除过时的版本。此外,Subversion中没有可以帮助您分析二进制文件的工具。两个二进制版本之间的区别是没有意义的。除了构建和检查版本的人之外,作者没有任何相关性 - 不一定是应该联系任何问题的人(这是一种很好的方式来说明责备)。
我希望这能回答你的问题。只检查您需要的内容,您的.svn
目录将会小得多。不要在Subversion中存储二进制文件,并且您的.svn
目录不必引用它们。如果这些没有帮助,请查看sparse checkouts,这可以消除您不需要的跟踪文件。
答案 1 :(得分:1)
一种选择是使用svnadmin工具的dump命令(如链接中所示),但是给它一个你愿意切断数据的点的起始修订版。这将导致转储启动修订,就好像它是添加了一个新树(即该修订版中的所有文件都是完整的)。这将为您提供最近X个月承诺修订的记录。您可以使用--deltas选项来减小转储文件的大小。请参阅http://svnbook.red-bean.com/en/1.7/svn.ref.svnadmin.c.dump.html。
然后,您可以创建一个新的存储库,并通过load命令将此转储文件提供给它,以获得一个新的存储库,其中只包含您想要的最新数据。
就我个人而言,我不建议这样做,因为你永远不知道什么时候旧的数据可以派上用场,但我不知道你的具体情况,这是实现我认为你要求的一种方式。
答案 2 :(得分:0)
看起来您的local working copy混淆了repository,因此不清楚您的具体要求。
如果您使用Subversion 1.7或更新的工作副本,那么它应该只包含根目录下的一个.svn
目录。 .svn
是一个管理目录,您不应该手动触摸它。实际上,它并不包含您所期望的完整修订历史记录。引用SVNBook:
管理目录中的文件可帮助Subversion识别 哪个版本化文件包含未发布的更改,以及哪些 文件已经过时与其他人相关了。工作
我认为.svn
目录占用8GB的事实意味着您检出了整个存储库。你是否?你真的需要有整个存储库的工作副本吗?通常,您应该仅检出存储在存储库中的项目的主干或分支,并且此类工作副本的大小要小得多。 @David在他的回答中提供了很好的总结。
答案 3 :(得分:0)
如果你只是想重新开始,我会这样做:
查看没有任何.svn
文件的行李干线:
$ svn export file:///path/to/current/repository old-trunk
在结账时除去您想要进入新存储库的任何内容。正如其他人所评论的那样,目前你可能在repo中有很多大型二进制文件,它们并不属于那里。
您可能会发现我的pigs
脚本对该搜索有帮助:
#!/bin/sh
du -skL "$@" -- * | sort -n
从该清洁提示结帐创建一个新的回购:
$ svnadmin create /path/to/new/clean/repository
$ svn import old-trunk file:///path/to/new/clean/repository \
-m "Tip of old repo trunk as of 2015.04.14, r12345"
暂时将旧的结帐移到一边,然后从新的清理存储库中进行新的检查。 保留旧的签出,直到您确定自己拥有所需的内容为止。即使您保留旧的存储库,也至少有一个已知的工作结帐也是好的。