Git 上 .NET 应用程序的版本控制策略

Versioning strategy for .NET apps on Git

我的公司刚开始使用 git,我正在为版本控制而苦恼。我们正在使用语义版本控制 (major.minor.patch),我们根据对产品所做的更改进行设置。但是,我想使用第四部分来指示 git 提交。我读过有关如何执行此操作的文章,尤其是使用 post-merge hook 的文章,但我越深入,就越感到困惑,不是在技术部分,而是在概念部分。

我真的很喜欢能够在版本中使用 git 提交哈希的想法,因为它非常清楚软件是什么。但是,直到 提交后我才知道这一点,此时更改版本将需要另一次提交,并且哈希将不正确。因此,如果我得到一个版本号,请转到 git,我实际上会在使用中之前获得提交。我想要的是能够转到 git,获取标签并按照使用中的方式完全构建它。

我怀疑答案在于构建过程,因为该过程会查询 git、获取哈希、更新 AssemblyInfo.cs,然后构建产品。

由于我对这一切还很陌生,我想知道是否:

谢谢!

散列(对于 git,一个 sha1)密封提交的所有内容。如果提交中只有一件事发生变化,文件的内容或提交的元数据(提交日期、提交消息、作者……),则哈希将不同。 在这种情况下,您了解您无法 获取提交哈希、修改文件内容和修改提交并期望提交具有相同的哈希! 因此,如果您想对程序集进行版本控制,则必须在编译解决方案之前在构建过程中使用提交哈希更新 AssemblyInfo.cs 文件。

对于那些好奇的人,这是我最终使用的解决方案。

在确认我确实了解整个 commit/hash 的工作原理后,我开始更多地研究构建过程。事实证明这很容易。这 article 让我朝着正确的方向前进。这是我所做的:

  • 使用 NuGet 向项目添加了 MSBuildTasks
  • 设置 .csproj 文件以使用它的两个任务
    • GitDescribe
    • 装配信息
  • 已从存储库中删除 AssemblyInfo.cs
  • 现在在项目文件中设置版本(主要、次要和补丁)

现在,每次我构建时,它都使用项目文件中设置的版本,并使用自上次标记以来的提交 AssemblyFileVersion 并通过重建将散列放入 AssemblyInformationalVersion整个 AssemblyInfo.cs 文件。

三个注意事项:

  • 您必须至少有一个标签,否则它会出错(git 描述错误)
  • 除非在 git 下,否则不会构建。 IE。如果你做一个存档并尝试构建它,它就会爆炸。
  • 仅适用于带注释的标签。

我暂时可以忍受。

感谢您的帮助!