Svn VSS到Subversion

Svn VSS到Subversion,svn,migration,visual-sourcesafe,Svn,Migration,Visual Sourcesafe,我正在研究从SourceSafe到Subversion的潜在转移,我们正在与编辑/合并/提交与签出/更新/签入范式进行斗争。主要的问题是如何知道哪些文件是通过Subversion签出的(以及签给谁的) VSS中是否存在与“状态搜索”等效的Subversion?还是因为缺少“保留签出”而不可能 此外,如果我们尝试通过“锁”使用Subversion实现“保留签出”,是否有支持“签出时锁定”的GUI(TortoiseSVN、VirtualSVN等) 谢谢 更新:例如,在进行构建/发布之前,我们希望绝对

我正在研究从SourceSafe到Subversion的潜在转移,我们正在与编辑/合并/提交与签出/更新/签入范式进行斗争。主要的问题是如何知道哪些文件是通过Subversion签出的(以及签给谁的)

VSS中是否存在与“状态搜索”等效的Subversion?还是因为缺少“保留签出”而不可能

此外,如果我们尝试通过“锁”使用Subversion实现“保留签出”,是否有支持“签出时锁定”的GUI(TortoiseSVN、VirtualSVN等)

谢谢


更新:例如,在进行构建/发布之前,我们希望绝对确保所有文件都已签入。开发人员忘记了。所以我们需要知道哪些文件被签出。这在Subversion中是可能的吗是否可以查看签出(或锁定)文件的列表?在资源管理器中浏览整个代码库是不可行的,是否有一些报告样式列表或搜索功能

我真的建议将VSS转移到Subversion(或者,坦率地说,甚至是纸笔)。更准确地回答你的问题;使用Subversion,您不需要像使用VSS一样知道谁签出了文件;Subversion(和合理的源代码管理系统)不具备VSS所具备的合并更改的能力。

TortoiseSVN将告诉您如果文件被锁定,当您在explorer或repo浏览器中查看文件时,文件上方会出现一个锁定图标

然而,SVN的标准操作方法不像VSS中那样是锁定/更新/解锁。SVN中的“签出”类似于VSS的“获取最新版本”


就个人而言,我会避免锁定/更新/解锁工作流。SVN中的合并算法比vss中的合并算法要好得多。Lock/update/unlock从根本上反对并发开发。

如果您使用的是编辑/合并/提交范例(顺便说一句,您不必使用/Subversion),那么实际上就没有“签出”文件的人

使用编辑/合并时,没有文件被锁定,您将假定每个文件都已向每个用户检出(解锁)

开发人员拉下整个基线(或者至少是他们想要构建的部分),当情绪袭来时,他们只需编辑他们想要的任何内容。当他们想重新检入更改时,这就是“合并”的作用

乍一看,作为VSS用户,您可能认为签入文件可能会“擦除”自您签出文件以来对该文件所做的更改。起初我也不明白这是怎么回事。这里的诀窍是SVN可以告诉你,自从你签出文件后,其他人何时签入了该文件的某个版本,因此它需要合并,而不是简单地替换。它比VSS更智能。:-)

理论上,这种情况不会发生太多,从长远来看,处理冲突编辑的时间将少于处理其他人锁定的文件的时间。我曾经做过一次餐巾纸的快速计算,结果表明我工作的地方可能是正确的,但YMMV


更新:对于您试图保护开发人员不忘记签入更改的过程,这可能不再有效。您可以尝试在每个开发人员的工作目录中查找差异,但我认为我们都同意这是不可行的

正确的做法是,锁定模型为开发人员提供了一种向中央存储库声明其修改文件意图的方法,而编辑/合并则没有。为一种方法构建的工具通常只是简单地对另一种方法毫无意义。这就是其中之一


作为toolmeister,我建议您与SVN一起尝试一个小型(或玩具)项目,以熟悉不同的工作方法。一旦你明白了这一点,你就应该能够把你的头绕在它周围。

SVN是乐观的:合并冲突很少而且很容易解决。VSS是悲观的:合并冲突很难解决,因此您可以通过锁定来避免它们。因此,在svn中,您不需要知道文件已“签出”。您只需签出一个版本,而无需锁定和编辑。冲突在提交之前解决,通常svn会自动为您解决冲突,除非两个或多个提交正在修改相同的源代码行

因此,实际上不需要“状态搜索”

SVN确实支持锁定的概念,这对于那些难以合并的二进制文件很有用。即使在那里,锁也不硬;这只是向其他开发人员发出的一个信号,“请不要在我编辑此文件时提交。”SVN GUI可以选择锁定文件。您还可以使用特殊的
svn:needs lock
属性强制锁定

有关锁定的详细信息,请参阅SVN手册:

支持Visual Studio中的编辑锁定,但即使我使用了该功能,我还是建议仅在没有其他选项(例如,特定生成的代码和二进制文件)时才使用该功能。对于开发人员处理不同任务的团队中的普通源文件,几乎不需要执行独占锁定

好的三方合并工具(如free)可以让您在偶尔发生冲突时(可能在整个团队中每隔几个月发生一次,而不是更多)轻松解决冲突。

Matt

作为一名搬到SVN的前VSS用户,我可以理解您的沮丧。不过,我相信你已经回答了你自己的问题。您已经表示,您正在努力从“锁定/编辑/解锁”心态转变为“更新/编辑/提交”心态,这确实是您感到沮丧的根源。我知道,因为我自己也去过那里

从根本上说,我认为你试图解决的问题是基于“锁定/编辑/解锁”的心态。。。这是一种“限制性安全模型”(正如前面其他答案所述),即我们希望保护您免受doin的影响
$ svnadmin lslocks /var/svn/repos
Path: /tree.jpg
UUID Token: opaquelocktoken:ab00ddf0-6afb-0310-9cd0-dda813329753
Owner: harry
Created: 2005-07-08 17:27:36 -0500 (Fri, 08 Jul 2005)
Expires: 
Comment (1 line):
Rework the uppermost branches on the bald cypress in the foreground.