我喜欢Subversion 1.7现在所有的pristines都在一个地方用于工作副本。但是,我经常有几个相同代码库的签出(主要是为了复制尚不存在的存储函数)。
为了节省磁盘空间,有没有办法组合所有这些原始文件夹,所以我没有多个干净的副本?特别是:
答案 0 :(得分:3)
我认为你做不到。 SVN计算每个pristine文件的引用号。如果它达到零,“svn cleanup”将删除这些文件。
另一方面,您可能会尝试使用SVN 1.7.5的hacky方式(由您自己承担风险!我不能保证进一步的SVN版本将与这些黑客兼容;我没有尝试,但是我知道SVN是如何工作的,这应该适用于1.7.5):
将'refcount'设置为更高的值以防止删除所有工作副本的校验和(您应该在每次“svn cleanup”调用之前执行此操作---更新新安装的pristine文件的'refcount'):
sqlite3 .svn / wc.db“更新PRISTINE set refcount = refcount + 100;”
Windows支持链接,但它们并不那么受欢迎: http://en.wikipedia.org/wiki/NTFS_symbolic_link至少他们即使在XP中也能正常使用。
所以hacky方法是创建一个目录,收集其中的所有原始文件(可能带有脚本)。在.svn / pristine指向该目录的链接。运行上面的SQL命令并在每次“svn清理”之前运行。
我还可以提供一种算法,如何从该配置恢复正常(如果出现任何问题)。
答案 1 :(得分:0)
我查看了Dmitry的回答,但我认为有一种更简单的方法,即在pristine目录中使用硬链接。然后删除该文件的一个版本不会影响其他副本。缺点是许多工具(例如,备份软件)仍会多次备份pristines,但我的主磁盘没有被吃掉。
另外,我从中了解到,如果你有大的改动,偶尔运行svn cleanup可以节省大量的本地磁盘空间!
总之,我的svnclone.bat看起来大致如下:
robocopy /E %1 %2 /XD .svn
robocopy /E %1\.svn %2\.svn /XD pristine
ln -r %1\.svn\pristine %2\.svn\pristine
这比直接复制要快得多。
缺点是,随着时间的推移,如果这些克隆是长寿的,那么将出现重复。但我觉得我的用法很好。