ローカルgitリポジトリがある場合に最新のタグを取得するための多くのメソッドがあります。
しかし、私はリモートレポで最新のタグのリストを取得したい。
私は「git ls-remote」について知っています。x.y.z(x、y、zは数字)のようなタグを使用すると、すべてがうまくいきます。しかし、タグが「test-x.y.z」および「dev-x.y.z」のように見えると、大量の「test」タグが新しい「dev」タグを引き出すことに気づきましたが、これは正しくありません。
では、これをどのように解決しますか?
Git 2.18(2018年第2四半期)で、git ls-remote
は、表示されているrefnameに基づいて出力をソートできるオプションを学習しました。
Harald Nordgren(HaraldNordgren
) による commit 1fb20df (2018年4月9日)を参照してください。
( Junio C Hamano-gitster
- in commit 6c0110f 、2018年5月8日)
ls-remote
: '--sort
'オプションを作成します
--sort
のオプションに基づいて、ls-remote
の 'for-each-ref
'オプションを作成します。
この例v1.2
がv1.10
の前にソートされるように、ref名をバージョンセマンティクスでソートできます。
そのため、これらの Git 2.0および2.8で導入されたfor-each-ref --sort
オプション をチェックしてください。これらは現在git ls-remote --sort
に適用されるためです。
Linuxを使用していますか?その場合、このコマンドを使用できます
git ls-remote --tags | grep -o 'refs/tags/dev-[0-9]*\.[0-9]*\.[0-9]*' | sort -r | head | grep -o '[^\/]*$'
10個の最新のタグが表示されます(名前はdev-x.y.z)
[〜#〜] upd [〜#〜]
このbashスクリプトを使用して、最新のタグを取得できます。
#!/bin/bash
TAGS=("dev-[0-9]*\.[0-9]*\.[0-9]*" "test-[0-9]*\.[0-9]*\.[0-9]*" "good-[0-9]*" "new [0-9][0-9][0-9]")
for index in ${!TAGS[*]}
do
git ls-remote --tags | grep -o "refs/tags/${TAGS[$index]}" | sort -rV | head | grep -o '[^\/]*$'
done
必要な配列TAGS正規表現を追加するだけで、すべてのタグに対して10個の最新のタグを取得できます。タグを増やしたり減らしたりする場合は、param -nをheadコマンド「head -n 5」または「head -n 15」に追加するだけです。
念のため。フォルダー〜/ binに保存し(たとえば、git_tagsという名前で)、実行許可を追加します(chmod + x git_tags)。これにより、あらゆる場所からこのbashスクリプトを実行できます(git_tagsと入力するだけです)。
ある人は私にそのコマンドを言った:
git ls-remote -t repo.url.git | awk '{print $2}' | cut -d '/' -f 3 | cut -d '^' -f 1 | sort -b -t . -k 1,1nr -k 2,2nr -k 3,3r -k 4,4r -k 5,5r | uniq
これは最善の解決策ではありませんが、彼はコマンドsort
に目を向けました。
しかし、私は他のバージョンを知りたいです。
git ls-remote --tags | awk -F'/' '/[0-9].[0-9].[0-9].*/ { print $3}' | sort -nr | head -n1
Github apiを使用する:
curl https://api.github.com/repos/user/repo/tags | jq '.[] .name' | sort -nr | head -n1
これら2つは最新のタグを取得します。ヘッドパイプのn
フラグの値を変更することでリストを増やすことができます。たとえば、最新のトップ10リストを取得するにはhead -n10