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。两个存储库具有相同的名称。这样做之后,用户得到了他们的旧锁,因为什么都没有发生。
由于缺少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。两个存储库具有相同的名称。这样做之后,用户得到了他们的旧锁,因为什么都没有发生。