2016-12-01 68 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