如何处理VB6.vbp文件引用的更改

如何处理VB6.vbp文件引用的更改,vb6,Vb6,我们的VB6家伙是上一次RIF(减少兵力)的一部分。他所做的工作已经由我和另一个开发人员分担。我们经常同时对项目进行更改。这不是CVS的问题,因为我们在不同的领域工作。然而,VB6似乎会在每次我们任何一方接触项目时修改参考部分并更改路径。由于我们没有为源代码树设置完全相同的路径,因此在vbp文件上始终会遇到合并冲突 除了改变设置以获得相同的目录结构这一显而易见的方法外,还有其他方法吗?我建议两件事: 除非将文件添加到项目中,否则不要提交.vbp 将.vbp标记为只读,并将其签入回购协议。当用户签

我们的VB6家伙是上一次RIF(减少兵力)的一部分。他所做的工作已经由我和另一个开发人员分担。我们经常同时对项目进行更改。这不是CVS的问题,因为我们在不同的领域工作。然而,VB6似乎会在每次我们任何一方接触项目时修改参考部分并更改路径。由于我们没有为源代码树设置完全相同的路径,因此在vbp文件上始终会遇到合并冲突


除了改变设置以获得相同的目录结构这一显而易见的方法外,还有其他方法吗?

我建议两件事:

  • 除非将文件添加到项目中,否则不要提交.vbp
  • 将.vbp标记为只读,并将其签入回购协议。当用户签出它时,它仍然应该是只读的,这将防止对引用路径的更改(以及文件的随机重新排序)被保存。当您必须对项目进行更改时——将文件设为读写,保存更改,然后在提交之前再次将其设为只读

  • 根据您的版本控制系统,可以自动解决此问题。Subversion和Mercurial都支持钩子—由某些事件触发的脚本,如签出、更新或提交。我们编写了一个在提交时触发的相当简单的脚本:它查看提交包中是否有.vbp,如果有,则运行一个“正常化”例程

  • 将所有.cls/.bas/.frm文件按字母顺序放在.vbp的顶部
  • 将参考资料部分按字母顺序排列
  • 参考路径的小写字母
  • 该文件的其余部分被单独留下,因为它只是VB喜欢搞乱的前三个部分

    因此,在大多数情况下,当您提交并且没有对.vbp进行任何实质性更改时,钩子脚本会将您的.vbp文件恢复为规范的、有序的状态(如还原),这样做的效果是将其从提交中删除,因为它不再更改

    在向项目添加新文件或引用的情况下,VBP行的一致字母排序意味着可以避免合并冲突,因为VC合并算法可以轻松、正确地检测到更改

    我们用Javascript编写脚本,并使用Windows脚本主机执行脚本,因为至少对于Windows框来说,这消除了对Perl/Python等解释器的依赖


    将此脚本连接到新的VB项目需要30秒。与其他手动方法相比,它的优点是您不必有意识地处理VBP文件。只需将其与其他所有内容一起提交,脚本就会处理其余部分。

    正如C-Pound大师在回答中所说的,只有在确实需要时才签入.vbp文件,这并不常见。另外,我前一段时间问了一个简单的问题:VBP中DLL或OCX引用的路径完全不重要,我认为它们甚至没有被使用。VB6将使用它通过注册表查找找到的DLL的位置。但是,GUID和版本号是关键-如果这些更改出乎意料,您必须找出原因。我要添加第三件事,以确保VBP的所有必要更改都已签入。从安装了已知版本的组件的计算机上生成发布版本,并从一个干净的目录开始(以确保所有必要的文件都在版本控制中)。实现这一点的最好方法是自动构建;用Python“连接”脚本对我来说也不是一件30秒的工作。你能,有机会,和我分享脚本/把它放在你的答案上吗?对不起,我不能分享代码。“连接脚本”是指将脚本作为钩子附加到存储库的.hgrc中的预提交事件。因此:
    [hooks]
    precommit.normalise=“使用您选择的语言编写脚本的路径”
    我不是指编写脚本本身。这肯定需要30秒以上的时间,但我认为我对它的描述基本上就是你需要的所有规格。我理解。我已经自己做了这样的正常化程序。花了3个月的时间,而不是30秒。写;-)。如果有人需要它,我已经准备好在开放许可下发布它——尽管问吧。