使用Subversion管理Visual Basic 6项目

20

我的团队很快就要从Visual SourceSafe迁移到Subversion,同时在支持开发一个基于Visual Basic 6.0的旧项目。因此,我有几个问题:

  • 在Visual Studio 6中,Subversion最好的IDE集成工具是什么?(或许这并不值得麻烦...)
  • 是否有任何在使用Subversion与Visual Basic 6.0一起的最佳实践?(例如要忽略的文件类型等)
7个回答

16

我同意使用Windows资源管理器中的Tortoise SVN是在VB6中使用SVN的最佳方式。

您在迁移到SVN时最大的变化是“Check out”和“Check in”的概念与“Update”和“Commit”不完全相同……因此,任何与VB6集成的IDE受限于VB6支持MSSCCI,即一种检出/检入机制。我曾经使用过TamTam SVN (http://www.daveswebsite.com/software/tamtamsvn/index.shtml) 与Visual Studio 2003,但由于发现它的局限性而停止使用。合并/分支/责备等都是Tortoise SVN提供的非常强大的功能,这些功能在TamTam中没有。Tigris也有http://svnvb6.tigris.org/,但我没有尝试过。

同样,虽然您可能会使IDE与VB6配合工作,但我不推荐这样做,因为迁移到SVN的最大优势是打破Source Safe的检入/检出哲学。


VSS锁定并不意味着SCCS API需要锁定-也就是说,您可以在IDE中使用不同的源代码管理工具,并且它仍然会按照您的期望正常工作-请查看VS2005+中的Ankh。 - gbjbaanb
2
@gbjbaanb - 我不是专家,但从Ankh的官网上可以看到:"AnkhSVN 2.0实现了Microsoft在Visual Studio 2005中引入的新风格SCC VAPI,当时他们也引入了TFS。这消除了旧式MSSCCI API的锁定要求和其他几个限制。" - Richard Morgan
http://svnvb6.tigris.org/:"[svnvb6] 不符合 Microsoft 为源代码控制插件设计的接口。这个接口并不真正适合将Subversion集成进去。" - Mike Spross
我们使用过SVN VB6,它的表现很好。个人而言,我只用它来标记更改的文件,但对于其他所有事情,Tortoise是最好的选择。 - drizzt

12

由于Subversion使用更新/编辑/提交循环(而不是签入/签出),因此您需要特别注意二进制文件。VB6中的大多数窗体由两个文件组成:MyForm.frm和MyForm.frx。*.frx文件是二进制文件,因此无法合并。

考虑到这一点,我会设置Subversion对.frx文件进行“锁定”。这意味着一次只能有一个人检查该文件。通过这样做,您将强制只有一个开发人员可以同时修改这些文件,并且始终清楚当前是谁在进行修改。如果您不这样做,那么您将会遇到一些大问题。


你如何设置SubVersion以要求在某些文件类型(如frx)上锁定? - awe
不幸的是,每个.frx文件都必须单独设置svn:needs-lock属性。通过一点脚本编写,我相信可以编写一个预提交钩子,在所有.frx文件上自动设置该属性,但我还没有做到那一步。 - Matt Dillard
你能举一个这会成为问题的例子吗? 还有,如果我一个人工作,这会是个问题吗?(我猜问题是Programmer1修改了.frx文件而没有修改.frm文件,导致它们不同步。) - Clay Nichols
克莱,你成功解决了这个问题。如果多人同时修改.frx文件,则无法合并,因为它是二进制文件。锁定文件的替代方案是仅更新文件的最新版本,放弃您的更改并重新进行更改。在您的情况下,由于只有您在项目上工作,因此这种多用户合并场景对您来说不会成为问题。 - Matt Dillard
2
+1 你可以通过编辑本地SVN配置来默认要求对某些文件类型进行锁定。这需要在每台使用SVN的客户端机器上完成 :( 如果你正在使用TortoiseSVN,那么可以通过TortoiseSVN\Settings\General\Subversion configuration file打开文件。然后在[auto-props]中加入*.frx = svn:needs-lock - MarkJ

5

忽略的文件类型:

*.vbw
工作区文件,当您关闭项目时自动生成,包含您打开的文件等信息。

MSSCCPRJ.SCC
由VB6 IDE生成的源代码控制状态文件(如果您选择在Windows资源管理器中控制SVN,则应禁用VB6中的源代码控制插件,这将不会生成该文件)。

*.log
如果加载表单GUI时出现问题,将生成此文件。该文件与表单文件位于同一位置,并具有与表单文件相等的名称。
示例: MyForm.frm 会生成 MyForm.log 文件。

当然,如果您没有需要放入源代码控制的日志文件,那么您可以忽略以上文件。


5

根据您计划在这些传统项目上执行的工作量,我建议您不要进行转换。

我真的建议您切换到SVN。我知道有一些项目因为VSS数据库损坏而丢失了源代码。

我认为有一些工具可以将从SourceSafe迁移到SVN。(是的-快速谷歌搜索确认了这一点。)这样,您就不会失去修订历史记录。


你引用了Keith的答案(有用的是它的赞数比你的答案少;^)):https://dev59.com/23VD5IYBdhLWcg3wTJvF#25035 - awe

3

我猜不必麻烦自己去整合,直接在Windows资源管理器中使用Tortoise SVN即可。

至于要忽略的文件类型,可以测试一下,检出、构建,看看是否有文件发生了变化(对于现代的Visual Studio,我倾向于忽略.suo文件)。


1

对于服务器端,VisualSVN Server是一个超级简单的解决方案,我们正在虚拟机中运行它,并且它一直很顺畅。

如果你是一个命令行用户,我真的很喜欢svn的命令行界面,我发现它比tortoise更容易理解某些操作,例如文件夹的状态。但是如果你是一个资源管理器的粉丝,tortoise已经足够了,这来自于源安全的世界。

需要忽略的主要内容包括:

  • 可重复使用的构件(dll、pdb、exe)
  • 特定环境设置(即vs的设置文件、csproj.user文件、.suo文件)

proj.user”文件和“.suo” 文件不是VB6的文件! VB6的等效文件是“.vbw”。 - awe
谢谢,我只在玻璃下看过VB6,我是一个网页开发人员,在它的鼎盛时期我一直在做PHP。 - DevelopingChris

1

根据你在这些遗留项目上计划做多少工作,我会考虑不要切换。

当挖掘遗留代码时,拥有所有历史记录和责任非常有帮助。 SVN比VSS好得多,但是当你切换时,你将失去历史记录。

如果你将在VB6中进行大量持续开发,那么切换到SVN可能是值得的,但是如果你将来要做这么多工作,是否也值得审查项目?

我有一个类似的问题,只是遗留项目是用Delphi编写的。如果它们是VB6,我认为我会考虑将它们“升级”到VB.Net,以便更易于维护。


为什么会有-1的投票?不确定为什么这个回答没有帮助——特别是因为这个踩票是在一个多年之后的。:-/ - Keith
1
我不同意这个答案。几年前,当我们将代码库转移到SVN时,我们只是保留了VSS存储库并将其锁定,以便没有人可以更新它。如果需要查找某些内容(这种情况已经发生过几次),我们仍然可以在VSS中查看历史记录,但我们不再受到VSS的限制,并获得了所有SVN的好处。 - UnhandledExcepSean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接