我有一个用 .NET 3.5 编写的相当大的类库,我想升级它以使其也可用于 .NET 4.0。
在这个过程中,我会剔除很多旧垃圾,并重写一些代码以更好地利用新类和 .NET 4.0(如 TPL)中的支持。因此类库会有所不同,但仍然足够相似,以至于可以以相同的方式对两者进行一些错误修复。
我应该如何在 Mercurial 中最好地组织这个类库?如果这很重要,我正在使用 Kiln (fogbugz)。
我在想:
- 一个存储库中的命名分支,然后可以将任何错误修复从一个存储库移植到另一个存储库
- 一个仓库中的未命名分支,也可以移植,但我觉得这样会显得凌乱
- 单独的存储库,必须重新实现错误修复(或使用非水银集成的比较工具来帮助我)
你会怎么做?(我还没有想到的任何其他替代品也是受欢迎的。)
请注意,类库在某些方面会有很大差异,我有一些旧的集合类型代码的残余,这些代码与我将删除的 Linq 类似,以及一些使用它的代码,我将重写以使用 Linq 方法. 因此,仅仅复制项目文件并使用#if NET40..#endif
部分是行不通的。此外,类库的 3.5 版本不会获得很多新功能,主要是关键错误修复,因此保持两个版本同样“活跃”并不是真正必要的。因此,所有文件的单独副本就足够了。
- 创建两个分支(或保留一个“默认”并为另一个路径创建另一个分支,在我的情况下为“默认”=.NET 4.0 和“net35”=.NET 3.5)
- 沿着不同的路径发展它们
- 当发现一个严重的错误修复,并且这在两个版本中都存在(即在 3.5 和 4.0 中),并且可以在通用代码中修复,因为 3.5 版本不会产生很多新功能,这意味着该错误是最有可能出现在原始版本中(在我分支之前)
- 因此,我创建了另一个分支,脱离原始版本(或非常接近它),实现我的错误修复,然后我将此技巧合并到 3.5 和 4.0 分支中以更新它们。
我将不得不考虑这一点。似乎 Mercurial 中的合并会拉入文件,而不是更改,这意味着对需要修复错误的文件所做的任何更改都有被“合并”回早期阶段的风险,但我必须对其进行测试。