我刚从SVN和Maven转到GIT + IVY,对修复标签管理的错误有很大的疑问。
假设我们的客户(假设客户X)已经生产了支持多个客户的1.0版软件。
客户X应用程序的程序集(收集我们软件的所有依赖项的项目)如下所示:
版本1.0客户X生产装配项目ivy.xml文件:
branch="master" revision="1.0"
- dependency mod_1 branch=master version=1.0
- dependency mod_2 branch=master version=1.0
- dependency mod_3 branch=master version=1.0
- dependency mod_4 branch=master version=1.0
客户X使用的是1.0版本,但与此同时,主服务器正在演变,现在我们假设是其他客户使用的4.0版本。
版本4.0客户Y和Z生产装配项目ivy.xml文件:
branch="master" revision="4.0"
- dependency mod_1 branch=master version=4.0
- dependency mod_2 branch=master version=4.0
- dependency mod_3 branch=master version=4.0
- dependency mod_4 branch=master version=4.0
现在,客户X发现存在涉及mod_1的错误。
他们从master分支(master_1.0_fix)的mod_1标签1.0切下了一个分支,并修复了产生master_1.0_fix 1.0.1版的错误
它们的程序集现在看起来像这样:
版本1.0.1客户X生产装配项目ivy.xml文件:
branch="master_1.0_fix" revision="1.0.1"
- dependency mod_1 branch=master_1.0_fix version=1.0.1
- dependency mod_2 branch=master version=1.0
- dependency mod_3 branch=master version=1.0
- dependency mod_4 branch=master version=1.0
现在,他们希望使分支名称与其他名称保持一致,以他们希望拥有的几句话来表达:
branch="master" revision="1.0.1"
- dependency mod_1 branch=master version=1.0.1
- dependency mod_2 branch=master version=1.0
- dependency mod_3 branch=master version=1.0
- dependency mod_4 branch=master version=1.0
但是我认为这并不正确,因为它不能代表应用程序的正确流程
这是因为与此同时master分支是从版本1.0演变而来的,并且实际的修订已在您可以看到的其他分支上定义,而不是在现在包含完全不同代码的master上定义,因此可能需要更长的时间开发。
在SVN中,标记不与任何分支相关,因此我可以使用1.0标记,然后为该版本创建修复程序,而无需与任何分支相关,这对我来说是一个很明确的概念。
在IVY中,标签与该标签所来自的分支之间存在着紧密的联系,而不是我不太清楚。
有不同的处理方式,但我想确认有关标准/最佳方法。
例如,我们可以接受,唯一的最佳标准解决方案是保留对差异分支的引用,因此
branch="master_1.0_fix" revision="1.0.1"
- dependency mod_1 branch=master_1.0_fix version=1.0.1
- dependency mod_2 branch=master version=1.0
- dependency mod_3 branch=master version=1.0
- dependency mod_4 branch=master version=1.0
或者我可以在发布时将分支硬编码到ivy.xml文件中,然后将其推送到引用master分支,这将是一种解决方法,因为我们的自动化实际上不支持此方法,而且我认为这也是错误的方法但我想得到对IVY有更深了解的人的确认。
如果问题不清楚,请原谅,但正如您可以想象的那样,这不是一个容易总结的话题。