2016-12-01 5 views
1

私たちのCIの一部は、version.txtファイルで指定されたバージョンを使用してレポにタグを付けることです。私たちは、単に実行します。我々は、自動的にバージョンを上げる方法はありませんのでタグがすでにコミット中であればgitタグは失敗しません。タグを付けたい

git tag `cat version.txt` 

は、個々の開発者に任されているversion.txtファイルを更新し、(私たちがメジャーまたはマイナーリリースを行っているかどうかを知る方法はありません)。つまり、エラーが起きる可能性があります。私たちが望む何

は次のとおりです。

  1. バージョンが更新されている場合は、レポはタグ付けして展開する必要があります。
  2. バージョンが更新されていない場合、CIサイクルは失敗します。
  3. が、 CIサイクルを手動で再起動された場合、これは私が現在はそれがすでに持っているタグにコミットタグ付けしたいときgit tagが失敗していなかった場合は要件3を容易に満たすことができスムーズ

実行する必要があります。タグ1.2.3が古いコミット(良い)内に既に存在する場合である

は、git tag 1.2.3は失敗しますが、それは私が(悪い)タグ付けしたいコミットである場合、それはまたは失敗し

すでにコミットされているタグの1つを使って現在のコミットにタグを付ける場合、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 *は*永続的で変更されないタグを前提としています。誰かがタグを削除してから再タグ付けすると、すでに*タグを持っている人は誰も*古い*タグ値を保持します。新しいタグを取得するには、タグも削除してから再作成する必要があります。 1000人のユーザーが2000コマンドを実行するようになります(1つは削除、もう1つは作成)。 – torek

関連する問題