nuget中Feature分支的版本控制策略

时间:2017-06-25 19:15:35

标签: .net git nuget nuget-package

我们正在构建一个由多个存储库组成的系统。其中一些是常见的。该解决方案使用.net技术,nuget和jenkin服务器构建。

我们计划推出版本控制。所有二进制文件都应该具有Major.Minor.Patch.Build等产品版本。

我们的CI服务器上将有一个专用的Nuget服务器,我们将发布常用项目的内部包。同样,我们将在开发人员的本地计算机上创建一个nuget服务器。

以下是问题场景:

支持一位开发人员正在开发一个长期运行的功能分支。此功能需要跨多个分支(包括公共分支)进行更改。开发人员将为这两个存储库创建功能分支并开始处理它们。

由于我们将有一个构建功能分支的工作(无论何时完成提交或在CI服务器上引发pull请求),CI服务器都将在集中式nuget服务器上为公共存储库创建一个nuget包。

如果生成的nuget包具有相同的版本(与前一个版本相同),则它将替换现有的包。

所以版本应该是不同的。要么我们可以增加以前版本的任何部分,比如构建部分,或者我们可以在版本号的末尾附加-featureName。应该首选哪一个?

如果我们在开发机器上做这两件事中的任何一件事,开发人员每次在分支机构之间切换时都必须更改软件包引用。因此,理想情况下,在dev机器上生成的包应该替换以前的包。但在这种情况下,开发人员在分支机构之间切换,他必须确保构建适当的通用包。

请为此方案建议任何标准解决方案。

感谢Advnace

2 个答案:

答案 0 :(得分:1)

你可以看一下GitVersion' (https://gitversion.readthedocs.io/en/latest/)可以帮助您根据git提交拓扑和分支名称轻松生成具有不同版本的每个新包。

每次推送都会构建一个具有不同名称的包。

特别是现在nuget支持最后一个版本的SemVer V2(如果需要更新)。

也许还有,你应该看看 trunk base programming'和功能切换使用较少的分支,这将简化您的开发。

也许还可以看看“monorepo”'这也可能有所帮助。

答案 1 :(得分:1)

我们采用了非常简单的解决方案-对于我不知道的较大团队来说,这可能会有一些局限性,但这对我们的小型团队有用。

将.nuspec文件中的版本更改为具有分支名称。例如:

  • 1.0.60-enumfix,它位于enumfix分支上
  • 1.0.61-enumfix
  • 1.0.59-newfeature
  • 1.0.60-dev,这是我们的dev分支
  • 1.0.60(这是我们的主人)
  • 2.3.80-whocares

你明白了

在nuget数据包管理器中安装软件包时,请选中“允许预发行” 如果需要,请删除或取消列出nuget预发行分支版本。