2016-12-01 69 views
1

我们CI的一部分是使用version.txt文件中指定的版本标记我们的repo。我们简单地做:如果标签已经在我要提交的提交中,git标签应该不会失败

git tag `cat version.txt` 

由于我们没有办法自动增加版本的方式(有没有办法知道我们正在做的主要或次要版本),更新version.txt文件留给个人开发者。这意味着错误可以发生。

我们要的是:

  1. 如果版本已经更新,回购应被标记和部署。
  2. 如果版本尚未更新,CI周期应该失败。
  3. 如果手动重新启动CI周期,这应该流畅运行

要求3可能是很容易满足,如果git tag没有失败,每当我要标记的电流,它已经有一个标签提交。

也就是说,如果git tag 1.2.3标签1.2.3已经是一个老犯(好)失败,但如果是在提交我要标记(坏)它失败。

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

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

回答

0

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

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

由于我们没有办法自动增加版本的方式(有没有办法知道我们正在做的主要或次要版本),更新version.txt文件,是留给个人开发者。这意味着错误可以发生。

当我实现了这样一个系统时,我已经默认发布到未成年人。所以,默认情况下,1.2.3变成1.2.4。我还在“准备发布”和“执行发布”之间留下最后的手动步骤以允许验证。

0

只需删除之前提交中已经给出的标记。相同的标签在不同的提交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 
+0

不要这样做:Git *假设*标记是永久的并且不变。如果某人删除了一个标签,然后重新标记,那么*已经有*标签的其他人将保留* old *标签值。要选择新的标签,他们必须*删除并重新创建标签。所以如果你有1000个用户,你会让1000个人运行2000个命令(一个删除,一个创建)。 – torek