当使用深度 = 1 克隆存储库时获取最新标签“gitdescribe--tags”

Cro*_*rog 6 git github git-clone github-actions

我在 CI 自动化工作流程期间读取 git 存储库的标签时遇到问题。我不想创建完整克隆,因为这会产生大量开销,因此更愿意维护“浅克隆”,但以某种方式确定应用程序版本控制的标签。

使用案例

  1. Github Actions CI 构建通过设置将 Git 存储库检查为“浅”克隆git clone ... --depth=1
  2. 预构建阶段将git describe --tags版本信息嵌入到已编译的应用程序中

预期结果

对于完整克隆,标签将报告如下:

> git describe --tags
v0.5.0-95-g7bbc323
Run Code Online (Sandbox Code Playgroud)

实际结果

CI 下的浅克隆的工作原理不一样:

> git describe --tags
fatal: No names found, cannot describe anything.
Run Code Online (Sandbox Code Playgroud)

解决方案思路

  • 修改 CI 下的“克隆”以某种方式包含标签?
  • 如果可能的话,修改预构建的“desribe”步骤以从远程读取标签?

bk2*_*204 1

你不可以做这个。为了git describe工作,您必须拥有标签和它们指向的提交,并且能够向后遍历历史记录,找到历史记录中最近的标签。当您使用 进行克隆时--depth=1,您仅克隆了一个提交,因此无法进行遍历。

但是,您可以进行部分克隆,--filter=tree:0然后您将只有标签和提交,直到您进行签出为止,此时将从服务器填充仅用于该提交的 blob 和树。但是,我不确定 GitHub Actions 是否原生支持此操作,因此您可能必须自己执行此操作。