visual-studio-2008 - Mercurial:维护Visual Studio 2005和2008分支机构

标签 visual-studio-2008 visual-studio-2005 mercurial tortoisehg

我正在尝试开发一个工作流,该工作流使我们能够维护单独的Visual Studio 2005和2008版本的库,同时确保始终将对一个分支的更改复制到另一个分支中。

目前,我建议仅对默认(VS2005)分支进行更改,然后完成后再合并到VS2008分支中。不幸的是,这依赖于纪律而不仅仅是在发现问题时以及在紧要关头时解决问题,这可能很困难。这导致我不得不在以后尝试将更改从一个分支改回到默认分支。

我知道我们可以将VS2005和VS2008项目之间的更改存储在补丁队列中,但是我是团队中唯一一个对命令行使用感到满意的人,我的同事更喜欢通过Tortoise HG做所有事情。

因此,我依靠事后解决问题。我当前的过程涉及为VS2008分支中的每个变更集导出补丁并将其应用于默认分支。这很耗时,但与尝试将VS2008分支的尖端与默认尖端合并,然后手动将其手动转换回VS2005相比,容易出错。

阅读this article后,我尝试撤消“升级”变更集,但最终的退回变更集总是以VS2008分支的新技巧结尾,而且由于合并结束,因此我无法再合并变更即使我尝试在提交时显式关闭该分支,也无法在VS2008分支中创建。

我已经尝试了多种方法来解决这个问题,但是最终我总是得到一个新的VS2008分支技巧,并且没有办法将更改合并回默认分支。因此,我开始想念这里很明显的东西。

因此,最终,当尝试维护一个库的两个版本时,其他人觉得最佳实践是什么,而这两个库之间您唯一想要的区别就是嵌入到项目和解决方案文件中的Visual Studio版本号?

编辑:我想避免的问题是,如果将VS2005项目添加到VS2008解决方案中(为了更方便调试),它将自动将VS2005项目“升级”到VS2008,从而导致“更改”的工作副本和分散的内容不必要的“转换”文件。因此,我不想让人们倾向于将他们的“升级”提交给主线,而是希望将分支机构分开,并要求用户在克隆后的第一次更新中选择他们需要的版本。



进一步编辑,并提供解决方案。

经过更多的讨论,我找到了一种使此工作流程与标准TortoiseHg工具一起工作的方法,而命令行干预只需要进行设置即可。

首先,我更新回变更集,在该变更集中,项目从VS2005转换为VS2008。我撤消了该修订,创建了一个补丁补丁,并剥离了撤消的变更集(因为它在默认分支中)。然后,我将回退补丁应用于转换变更集(使用:hg patch --no-commit patch),然后使用新的“ VS2005”分支名称来提交补丁。然后,我合并到了(未命名)VS2005分支的尖端。

下一步是更新(未命名)VS2008分支的旧技巧,进行无关紧要的更改,并将其提交为新的“ VS2008”分支。然后,我合并了VS2005技巧中的更改,但是在提交时不允许将对csproj文件的更改提交。然后,我在提交后还原了这些文件。

最后,我更新了VS2005技巧并合并到VS2008技巧中。

这导致了两个技巧,除了由于VS2005到VS2008转换而产生的差异之外,其余两个都具有相同的代码。

新的工作流程:


根据需要在VS2005或VS2008分支中工作。
在一个分支中完成更新后,请更新到另一个分支,将修改后的分支中的更改合并到其中并提交到其自己的分支中。然后更新回到您的首选分支。
如果两个分支中同时发生更新,请分别执行两个分支。更新到VS2005技巧并在VS2008技巧中进行合并,然后更新到VS2008技巧并在先前的(合并前)VS2005技巧中进行合并。

最佳答案

除了解决问题外,您还可以尝试使其消失:尝试premake
Premake是预构建系统(顾名思义,它可以运行pre-make或MSBuild之前的版本)。您可以在基于Lua scripting language的声明性内部DSL中描述您的项目一次,并且premake可以自动为VS2008、2005、2003和2002,MonoDevelop,SharpDevelop,Code :: Blocks,CodeLite或GNU Makefile生成解决方案和项目。 Unix,Cygwin或MinGW。它目前支持构建C ++,C和C#项目,包括针对32/64位的交叉编译,OSX通用二进制文件,PlayStation 3和XBox 360。
配置语言为very clean and declarative。但是,由于是在Lua之上构建为内部DSL的,因此您还可以轻松获得功能强大,美观,富有表现力(最重要的是图灵完整)的脚本语言的全面支持。配置语言的结构和术语都直接基于Visual Studio:它讨论了solutions, projectsconfigurationsplatforms
预制作工具本身是distributed as just a single .exe,其中包括Lua解释器,Lua标准库以及预制作脚本本身。它绝对没有外部依赖项,不写入配置文件,也不写入甚至不读取注册表。
您需要做的就是手动将VS2008解决方案转换为预制件。

关于visual-studio-2008 - Mercurial:维护Visual Studio 2005和2008分支机构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847164/

相关文章:

c++ - 错误 C2664 : cannot convert parameter 1 from 'X' to 'X'

c# - 如何在 C# 中将具有 32 位颜色质量的位图图像转换为 16 位颜色质量

c# - 将 XML 文件读入 TreeView

.net - 如何让 Intellisense 显示枚举值的含义

mercurial - 如何放弃未提交的 hg merge ?

Git 等同于 hg update

c# - 用数组名称包装序列化数组元素

visual-studio-2005 - C1083 : Permission denied on . sbr 文件

mercurial - 为什么我不能在 Mercurial (hg) 中删除这个远程书签?

c++ - 验证命令行参数的简单方法