SVN 迁移丢失锁 属性

SVN migration lost lock property

由于缺少space和服务器的改进,只好迁移了SVN服务器。操作结束后,所有用户都可以毫无问题地访问他们的项目。

但是有些用户注意到他们锁定的文件并没有锁定,而其他用户可以锁定它们。

我进行迁移所遵循的过程是这样的。

从旧 SVN 导出到转储文件:

svnrdump dump http://svnserver/path/to/repository > /path/to/file.dump

将转储文件导入新的 SVN 服务器:

svnadmin load --force-uuid /path/to/repository/ < /path/to/file.dump

我重复了不带 --force-uuid 参数的导入操作,结果相同。

有什么方法可以在执行 SVN 迁移时保持文件锁定?

谢谢。

svnadmin dump

不会复制锁和挂钩(如您所见),但您可以使用:

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

来自 link 的注释:

Hotcopies created with svnadmin hotcopy must be moved to a server with identical setup. You should have the same version of subversion installed on both servers, same operating system, etc.

所述,当您复制存储库时,您不会获得某些并非真正属于存储库本身的元数据,例如锁。

然而,在大多数 Subversion 商店中,很少使用锁。事实上,我想不起上次看到它们被使用是什么时候了。

旧版本控制系统有一个锁的概念,您必须在编辑文件之前锁定文件。这就像一个图书馆,你可以在其中签出一个程序,一次只能一个人做这个签出。问题是这是非常低效的。如果两个开发人员想要更改同一个文件,则意味着第二个开发人员必须等待才能完成他们的工作。如果第一个开发人员需要几天才能完成,那么第二个开发人员就必须等待几天。

大约十几年前,出现了编辑合并的新概念。在这个模型中,两个开发人员都可以进行更改,第一个将更改提交回版本控制系统的开发人员 获胜 。如果第二个开发人员想要签入他们的更改,他们必须首先更新他们的工作副本,获取其他开发人员所做的更改,然后签入他们的代码。

所有现代版本控制系统,Perforce、Subversion、Git、Mercurial 和其他系统现在都使用这种编辑合并模型。这只是一种更好的工作方式。

如果您仍然坚持在更改文件之前锁定文件,您应该重新检查您的开发方式。版本控制系统长期以来放弃这种做法是有原因的。

谢谢大家的回答。我知道使用 Subversion 的最佳实践是使用编辑合并方法。我一直用它。但在这种情况下,必须强制使用文件锁。

另外一个问题是新的服务器环境有不同的OS和不同版本的Subversion,所以我不能使用hotcopy。

我找到的解决方案是将锁目录从旧存储库复制到新存储库。 locks 目录位于存储库根目录 (/old_server/repository_name/db/locks) 的 db 目录中。我将其复制到 /new_server/repository_name/db/locks。两个存储库具有相同的名称。这样做之后,用户得到了他们的旧锁,因为什么都没有发生。