如何在 C# windows 服务中使用 Git 标签号代替 SVN 版本号

Posted

技术标签:

【中文标题】如何在 C# windows 服务中使用 Git 标签号代替 SVN 版本号【英文标题】:How to use Git Tag number in place of SVN version Number in C# windows Service 【发布时间】:2021-11-09 09:35:28 【问题描述】:

我在 SVN 到 Git 迁移方面需要一些帮助。

我的项目是使用 Dev express 15.2 的基于 Windows 的项目,存储库位于 SVN 中。代码存储库已成功迁移到 Git,并且能够使用 Visual Studio 2015 启动和构建应用程序。

还有一个用 C# 开发的 windows 服务,它使用 SVN 的最新版本号来构建应用程序,以便分发给用户。

现在我的主要问题是如何通过使用 Git 标签号而不是 SVN 版本号来构建使用此服务的应用程序?

另外,在我的主项目中的 .csproj 文件中,我使用下面的代码来获取最新版本的 SVN。所以需要替换这个才能得到Git Tag Number

在我的构建服务中,有三个函数获取上次构建、当前 SVN 版本和最后 SVN 版本的详细信息。

    查看SVN版本

    查看上一个 SVN 版本

    CheckLastBuild()

这 3 个函数需要进行相应的修改,以适应 Git Tag 号而不是版本号。您能否提供有关如何进一步进行此操作的输入/反馈,以便它使用 Git 标签而不是 SVN 版本?

【问题讨论】:

Git 的标签是字符串,不是数字;除非您控制它们,否则您不能只假设它们是版本号。 Git 提交哈希 ID 看起来是随机的,而不是像 SVN -r 修订号那样连续。你需要做一些事情来处理这个问题,但你需要做什么取决于你想要的结果。 您可能还想评论 why / what 您试图用这个来完成,因为在 git 中可能有比尝试迁移更好的方法来做到这一点您当前的版本号处理到 git,没有版本号。 【参考方案1】:

这一切都取决于你如何创建你的 git 标签。 如果您使用

创建标签
git tag -a 1.2.3 -m “version 1.2.3” 

您可以使用 git 标签来获取版本号。 但是就像 torek 提到的,git 标签是字符串,所以你需要解析 git 标签。

你可以用

读取最后一个标签
git describe

您可以使用 –-abbrev=0 仅获取没有提交哈希的标签,并且可以使用正则表达式仅匹配具有版本架构的标签:

git describe –abbrev=0 –-match="*[0-9]*.[0-9]*.[0-9]*"

这将返回 1.2.3(如果这是最后创建的标签)

您可以找到有关创建 标签 here 和 git describe here 的更多信息。

【讨论】:

以上是关于如何在 C# windows 服务中使用 Git 标签号代替 SVN 版本号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 找到 Windows 服务的安装目录?

如何在 C# mvc 中停止或启动 Windows 服务?

如何使用c#和windows服务创建无敌的windows应用程序

c# 在windows服务中 使用定时器

如何在基于 C# 的 Windows 服务中处理以不同时间间隔并行运行的多个任务?

使用定期任务在 C# 中构建 Windows 服务 [重复]