svn - 我可以以某种方式在同一代码库的多个 checkout 中共享 pristines 文件夹吗?

标签 svn

我喜欢 Subversion 1.7 现在将所有原始内容集中在一处作为工作副本。但是,我经常对同一代码库进行多次 checkout (主要是为了复制尚不存在的存储函数)。

为了节省磁盘空间,有没有办法合并所有这些原始文件夹,这样我就没有多个干净的副本?特别是:

  1. 其中包含“额外”的干净文件是否不安全,这些文件不是任何当前 checkout 文件的基本副本
  2. 是否可以通过某种方式使用链接来完成此操作,尤其是在 Windows 上?

最佳答案

我认为你不能这样做。 SVN 计算每个原始文件的引用数。如果它达到零,“svn cleanup”删除这些文件。

另一方面,您可以尝试使用 SVN 1.7.5 的 hacky 方式(风险自负!我不能保证进一步的 SVN 版本将与这些 hack 兼容;我没有尝试过,但为了据我所知 SVN 是如何工作的,这应该适用于 1.7.5):

  1. 将“refcount”设置为更高的值,以防止删除所有工作副本的校验和(您应该在每次“svn cleanup”调用之前执行此操作——以更新新安装的原始文件的“refcount”):

    sqlite3 .svn/wc.db“更新 PRISTINE 设置 refcount=refcount+100;”

  2. Windows 支持链接,尽管它们不那么流行: http://en.wikipedia.org/wiki/NTFS_symbolic_link至少即使在 XP 中它们对我来说也能正常工作。

所以黑客的方法是创建一个目录,收集其中的所有原始文件(也许使用脚本)。在 .svn/pristine 处创建指向该目录的链接。运行上面的 SQL 命令并在每次“svn cleanup”之前运行。

我还可以提供一种算法,如何从该配置修复恢复正常(如果出现任何问题)。

  1. 删除链接 .svn/pristine,将其替换为空目录或(更好更快)使用该目录的内容副本以及所有 pristine 目录。
  2. 使用 SmartSVN 修复工作副本,如本文所示:http://vcs.atspace.co.uk/2012/06/20/missing-pristines-in-svn-working-copy/ (at 还解释了如果“refcount”变为零会发生什么)

祝你好运:)

关于svn - 我可以以某种方式在同一代码库的多个 checkout 中共享 pristines 文件夹吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11230016/

相关文章:

svn - 如何设置一个简单的 SVN 服务器?

svn - 您可以查询 subversion 以查找特定作者在几个小时内的所有 checkin 吗

svn - 颠覆: force users to update before commit

windows - 适用于 windows 的可移植 SVNServer

svn - 什么导致 svn commit 失败并将文件/目录报告为受阻?

c# - 以编程方式调用已安装版本的 TortoiseSVN 使用的 SVN 库

svn - 如何将本地 Subversion 存储库转换为托管在 bitbucket 上的 hg?

svn - Subversion externals 是反模式吗?

php - 颠覆网络管理

git - 使用 svn-migration-scripts 从 SVN 到 Git