【问题标题】:GitVersion – selective versioning multiple assemblies of the same projectGitVersion – 对同一项目的多个程序集进行选择性版本控制
【发布时间】:2016-12-29 12:28:54
【问题描述】:

我在一个 .net c# 项目中,该项目由一个包含多个类库项目的解决方案组成。

源代码控制由 git 使用 gitflow 作为分支模型进行管理。 我们已决定要实施项目的语义版本控制 (http://semver.org/),以便遵循标准方式来传达我们的版本。 为此,我们使用 GitVersionTask (via NuGet),它与 gitflow 配合得很好。

每次我们标记版本并从主分支执行构建时,所有程序集的版本都会更新,并且新版本即将交付。 只有其中一个程序集具有公共 API,其他所有程序集供内部使用。我想知道这是否是管理同一项目的多个程序集版本的正确方法我的意思是,当只更改了几个(甚至只是一个)时,更改每个程序集的版本不是错误的吗?为了让想法更复杂,一些“内部”程序集很可能会被其他项目使用,所以我认为增加一个没有受到更改的程序集的主要版本只是因为另一个程序集同一个项目正在推动重大变革。每个组装项目都应该在自己的存储库中管理吗?

提前致谢。

【问题讨论】:

  • 我会在不同的 repos 上管理内部和外部资源。没有理由向公众发布内部代码。

标签: semantic-versioning gitversion


【解决方案1】:

我知道这是一个老问题,仍然:

我想分享一个似乎可行的解决方法:

  1. GitVersion 使用 $(Build.SourcesDirectory) 查看源的位置 - src
  2. 我们可以使用 logging commands* 更改此设置

  3. 解决方法是在 GitVersion 任务之前设置 Build.SourcesDirectory

  4. 然后 gitVersion 使用项目文件夹 (Build.SourceDirectory) 中的 GitVersion.yml 和瞧 - 工作

之后,您可能想要回滚或不回滚更改 - 取决于您的需要。对我来说,从我们的 nugetPackages monorepo 中的 nuget 包集合中缩小到唯一的 nuget 包似乎很好。

GitVersion issuecomment

*Powershell 命令示例: standard PowerShell task; set to inline script; Write-Host "##vso[task.setvariable variable=Build_SourcesDirectory;]$(Build.SourcesDirectory)\$(NugetProjectName)"

【讨论】:

    【解决方案2】:

    在 GitVersion 中肯定没有任何东西可以帮助在同一个存储库中拥有单独的项目。我们将在此处提供的指导是,您应该为应用程序的不同部分使用不同的存储库。这样他们就可以按照自己的节奏进行版本控制/更新。

    【讨论】:

    • 假设我的解决方案有 3 个类库项目,名称为 A、B、C。当我构建解决方案时,我得到了 3 个名为 A.dll、B.dll、C.dll 的程序集。所有 3 个项目都是为了满足这一特定产品需求而诞生的。组件的 A 和 B 都与该产品紧密相连,永远不会在其他地方使用。另一方面,组件 C 是一个独立的组件,非常有用,因此很可能包含在未来的产品中。如果我理解你的话,类库 C 应该在它自己的 repo 上管理,A 和 B 项目应该在同一个 repo 上管理。它是否正确?谢谢。
    • 是的,这就是我会采取的方法。
    猜你喜欢
    • 2023-02-11
    • 1970-01-01
    • 2018-08-23
    • 2015-03-08
    • 2010-11-02
    • 2010-11-16
    • 2018-08-01
    • 2018-12-28
    • 2014-06-22
    相关资源
    最近更新 更多