LoginSignup
14
13

More than 5 years have passed since last update.

会社のgitのタグ付けルールが 日付 + 連番 の形式で、都度最新の連番を調べてタグ付けるのが面倒だったのでシェル書いた。

Posted at

タイトルの通り。

git tag $(TODAY=`date +%Y%m%d`; git tag | grep -e ${TODAY} | cat - <(echo "${TODAY}_00") | sort | tail -1 | awk -F "_" "{cnt=\$2+1}{printf \"%s_%02d\", \$1, cnt}")

コテコテだけど、こんなかんじで。

ちょっと解説

やっていることはすげー簡単で...

  • 当日の最新のタグを取得
  • 連番部分に +1 して新しいタグを生成

こんだけ。もうちょっとkwsk。

ゴニョゴニョしているのがこの部分。

$(TODAY=`date +%Y%m%d`; git tag | grep -e ${TODAY} | cat - <(echo "${TODAY}_00") | sort | tail -1 | awk -F "_" "{cnt=\$2+1}{printf \"%s_%02d\", \$1, cnt}")

ひとつずつ見ていく。

TODAY=`date +%Y%m%d`;

ここは見ての通り、当日の日付を TODAY に代入している。

大事なのは次。

git tag | grep -e ${TODAY} | cat - <(echo "${TODAY}_00")

1つ目のパイプのところまででタグ一覧から当日のタグを抽出している。

ただ当日初回のタグ付けの場合は grep で絞った結果何も渡ってこないので2つ目のパイプが効いてくる。

... | cat - <(echo "${TODAY}_00")

パイプで受け取る標準入力に "${TODAY}_00" を加える。

前述のとおり、当日初回は grep の結果何も渡ってこないのでその場合は...

20140819_00

のようになる。(日付は 2014/08/19)

... | sort | tail -1 | awk -F "_" "{cnt=\$2+1}{printf \"%s_%02d\", \$1, cnt}"

その文字列を昇順で並び替えて最下行を取得して awk で連番を振る。

20140819_01

僕は gtag みたいなシェルのエイリアスとして登録して使ってます。

ちょっとした改善だけど、こういうシェル考えるの楽しいね!

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13