2017-06-09 46 views
0

如果有两个用户在同一个文件上工作,并且user Auser B之前提交,那么user A的提交会在没有警告的情况下被覆盖。为什么svn允许覆盖以前的提交?

这是为什么,有什么办法来防止这种情况?

这只是发生在这里,我不得不通过修补user Auser B的提交后所做的修改。

这似乎是危险的,不能告诉特定文件的基础尚未更新?

+0

您的文件是二进制文件还是ascii文件? – Stewart

回答

2

SVN将不会仅仅覆盖userA s提交,除非userB明确要求。这不是偶然发生的事情。

userB尝试提交他们的文件,SVN会显示错误 enter image description here

现在userB需要做一个SVN更新。有两种方法,现在这个可以去根据文件类型:

ASCII

SVN真的设计与ASCII(文本)文件的工作。如果您执行SVN更新,它会将userA的更改“合并”到userB的文件中。这意味着任何由userA更改的行将在userB的工作副本中更改。 userB应真正检查合并以确保更改不会破坏userB正在尝试执行的操作。如果两个用户都改变了相同的行,那么冲突将被标记。 userB将需要检查冲突,找出userA正试图完成什么,然后手动决定如何做以保留两个用户的更改。

二进制

SVN并非真的被设计为合并二进制文件。当合并适用时,则需要依赖那些为特定二进制文件真正定制的工具。当userB执行更新时,将会出现冲突,并且userB将无法​​检查差异并合并文件。如果没有适用于该特定二进制类型的合并工具,userB将需要接受userA的版本,然后使用任何工具生成该二进制文件重新对二进制文件进行更改。

userB可以通过保存其工作副本的副本,执行svn update,然后恢复副本和提交来绕过此工作流程。这将恢复所有userA的更改。特别是在这种ASCII情况下,这被称为冲洗移动。在二进制情况下,两个用户应该真正沟通并决定哪两个用户需要重做他们的工作。

当在SVN中使用二进制文件时,这可能会成为一个大问题。解决方案是经常提交或使用acquire lock功能。此外,请务必在处理文件之前立即写入svn update,并在完成更改后立即写入svn commit

如果userB刚刚通过拒绝合并破坏了大量工作,那么您总是可以改变userB的提交方式,并让他们再次尝试。