web-dev-qa-db-ja.com

リモートgitで最新のタグのリストを取得する方法は?

ローカルgitリポジトリがある場合に最新のタグを取得するための多くのメソッドがあります。

しかし、私はリモートレポで最新のタグのリストを取得したい。

私は「git ls-remote」について知っています。x.y.z(x、y、zは数字)のようなタグを使用すると、すべてがうまくいきます。しかし、タグが「test-x.y.z」および「dev-x.y.z」のように見えると、大量の「test」タグが新しい「dev」タグを引き出すことに気づきましたが、これは正しくありません。

では、これをどのように解決しますか?

36
Psychozoic

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.2v1.10の前にソートされるように、ref名をバージョンセマンティクスでソートできます。

そのため、これらの Git 2.0および2.8で導入されたfor-each-ref --sortオプション をチェックしてください。これらは現在git ls-remote --sortに適用されるためです。

2
VonC

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と入力するだけです)。

35
cooperok

ある人は私にそのコマンドを言った:

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に目を向けました。

しかし、私は他のバージョンを知りたいです。

8
Psychozoic
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

6
f-society