【问题标题】:git tag should not fail if tag is already in the commit I want to tag如果标记已经在我要标记的提交中,则 git 标记不应失败
【发布时间】:2016-12-01 06:45:24
【问题描述】:

我们 CI 的一部分是使用 version.txt 文件中指定的版本标记我们的 repo。我们只是这样做:

git tag `cat version.txt`

由于我们无法自动增加版本(无法知道我们是在做主要版本还是次要版本),所以更新version.txt 文件留给了个人开发人员。这意味着错误可能而且确实会发生。

我们想要的是:

  1. 如果版本已更新,则应标记并部署存储库。
  2. 如果版本尚未更新,CI 周期应该会失败。
  3. 但是如果手动重启 CI 周期,这应该可以顺利运行

如果git tag 在我想用它已有的标签标记当前提交时没有失败,则可以轻松满足要求 3。

也就是说,如果标签 1.2.3 已经在旧的提交中(好),git tag 1.2.3 会失败,但如果它在我想要标记的提交中(坏),它会失败。

如果我想用它已经拥有的标签之一标记当前提交,有没有办法告诉git tag 不要失败?

否则我需要自己实现这个功能,通过获取标签所引用的提交,并根据 HEAD 中的当前提交检查它。

【问题讨论】:

    标签: git bash


    【解决方案1】:

    标记之前,检查当前提交是否已经有该标记。

    git tag -l --points-at HEAD <tag>
    

    由于我们无法自动增加版本(无法知道我们是在做主要版本还是次要版本),因此更新 version.txt 文件留给了个人开发人员。这意味着错误可能而且确实会发生。

    当我实现了这样一个系统时,我将发布默认为次要版本。因此,默认情况下,1.2.3 变为 1.2.4。我还在“准备发布”和“发布”之间留下了最后一个手动步骤,以允许验证。

    【讨论】:

      【解决方案2】:

      只需删除之前提交中已经给出的标签。不同提交 git 中的相同标签不允许也不需要我认为。

      $ git tag -d <tag-name>                       # delete the tag from local
      $ git push origin :refs/tags/<tag-name>       # delete a tag from remote 
      $ git tag <cat version.txt>                   # give a new tag on current commit
      $ git push --tags                             # push tag
      

      【讨论】:

      • 不要这样做:Git assumes 标签是永久不变的。如果有人删除一个标签然后重新添加标签,那么已经拥有该标签的其他所有人都将保留 old 标签值。要获取新标签,他们必须删除并重新创建标签。因此,如果您有 1000 个用户,您将让 1000 人运行 2000 个命令(一个删除,一个创建)。
      猜你喜欢
      • 2019-03-20
      • 1970-01-01
      • 2018-04-24
      • 2011-05-23
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      相关资源
      最近更新 更多