通过 VisualSVN 服务器和 AnkhSVN 在 Visual studio 中使用 SVN

Using SVN in Visual studio via VisualSVN Server and AnkhSVN

我们的团队已经在使用 TFS,但我们遇到了很多问题。但我们不会在这个话题上走那条路。

我正在为我们的团队尝试用 SVN 替换 TFS。我在 Windows 服务器上安装了 VisualSVN 服务器,我们在客户端使用 AnkhSVN。使用这些软件没有问题。我们可以访问所有内容并且一切正常。

但是,我在编辑多用户文件时遇到了问题。在 TFS 中,当有人打开文件并进行更改时,该文件将仅为该用户签出,网络中的任何其他人都无法更改该文件。但是在 SVN 中,当我打开文件并进行一些更改时,其他人也可以这样做。

最后,当我提交更改并且他们执行 "Get updates" 时,他们的文件发生冲突。

所以我的问题是,如何解决这个问题?

阅读Version Control with Subversion book (SVNBook)。 SVNBook 是 SVN 的圣经,Subversion 管理员和用户必读

您可能会觉得有帮助的章节:

Subversion 支持 Copy-Modify-Merge 和 Lock-Modify-Unlock 版本控制模型,当多个开发人员需要处理同一个文件时,这两种模型都能解决问题。例如,按照复制-修改-合并模型处理同一个文件的多个用户可以并行工作,解决冲突(如果发生任何冲突)是此工作流程中的基本步骤之一,但在大多数情况下,您应该避免它们。

另一方面,使用锁定-修改-解锁模型(您习​​惯作为 TFS 用户使用的模型),用户可以锁定文件(即防止其他人在他进行某些更改时修改它)然后提交更改并解锁文件以允许其他人开始修改它。

请阅读SVNBook | Version Control Basics: Versioning Models 部分。

详细了解 Locking feature in Subversion in SVNBook

听起来TFS 延续了VSS 对独占锁定的使用。切换到现代 VCS 使用的更合理的模型可能需要一些时间来适应。

Subversion 使用 copy-modify-merge model。它允许多人同时处理同一个文件,然后当第二个用户将他的更改提交到存储库时,两个用户合并任何冲突的更改。

这可能看起来违反直觉,但它比您习惯的独占锁定要好得多。在独占锁定模型中,如果我需要编辑文件的第 1-20 行,我必须等到您完成第 500-600 行之后我才能做任何事情。如果你去度假 2 周,让那个文件处于锁定状态,我就会完全陷入困境。

如果您不能放弃独占锁定模型(总的来说,这会减慢您的速度),请对所有文件使用 svn:needs-lock 属性。这将在每个用户的工作副本中将文件标记为只读,迫使他们 acquire a lock 做任何工作(或转到他们的文件系统并取消设置只读属性)。

在 Subversion 中锁定的目的不是强制执行密闭控制;相反,除非您在服务器上采取额外的步骤,否则有几种(简单的)方法可以解决它。相反,Subversion 锁定的目的是让开发人员在潜在冲突发生之前 相互讨论。但是 Subversion 可以很好地处理纯文本文件(源代码)中的大多数冲突,因此即使您确实有冲突,也不会太繁琐而无法解决。