2013-12-22 15 views
32

ローカルのgitリポジトリを持っているときに最新のタグを取得する方法はたくさんあります。リモートgitの最新のタグのリストを取得するには?

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

私は "GitのLS-リモート" について知っている、とあなたはX.Y.Z(X、Y、Zは数字)のようなタグを使用するときにすべてが正常です。 しかし、タグが "test-x.y.z"と "dev-x.y.z"のように見える場合、大量の "test"タグが新しい "dev"タグを引き出すことに気付きましたが、これは正しくありません。

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

+0

を取得するには、言うことができますあなたは多くの「テスト」のタグを持つこと 'GitのLS-remote'の出力に含まれないために、「DEV」のタグを引き起こすことを言っていますか?私はそれが信じがたいことがわかります。あなたが望むタグ( 'git ls-remote ... dev- *')だけに出力を制限するタグパターンを指定するとどうなりますか? –

+0

最後のタグが10個必要な場合は、10個以上の「テスト」タグがあれば、新しい「dev」タグは表示されません。 – Psychozoic

+0

私は必要に応じてGroovyスクリプトを動作させようとしています。 Groovyのスクリプトは私がそこに見た:http://stackoverflow.com/questions/7157170/can-i-get-jenkins-to-build-a-git-tag-from-a-passed-in-parameter – Psychozoic

答えて

34

linuxを使用していますか?あなたは、このコマンドを使用することができる場合

git ls-remote --tags | grep -o 'refs/tags/dev-[0-9]*\.[0-9]*\.[0-9]*' | sort -r | head | grep -o '[^\/]*$' 

は、それはあなたの

UPD(名前DEV-XYZ付き)10個の最新のタグが表示されます
あなたは、最新のタグを取得するには、この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 

だけ配列タグにしたい正規表現を追加し、あなたはそれらのすべてのために10の最新のタグを取得します。多かれ少なかれタグを取得したい場合は、headコマンド 'head -n 5'または 'head -n 15'にparam -nを追加するだけです。

〜/ binフォルダに保存して(例えばgit_tagsという名前で)実行可能パーミッション(chmod + x git_tags)を追加すると、このbashスクリプトをあらゆる場所から実行できます(git_tagsとタイプするだけです)。

+0

"dev"タグのみ。しかし、ありがとう...私はそのように考えるだろう – Psychozoic

+0

両方のタグ(devとtest)を取得する必要がありますか? – cooperok

+0

はい!実際には、new-xxx、good-dd.mm.dd、dd.mm.ddのような他のタグを使用するとgreateになります。または他の何か。 でも可能でない場合は - そうです – Psychozoic

8

いくつかの男が私にそのコマンドに次のように語った。

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に私の目を開きました。

しかし、私は他のバージョンを知っていただきたいと思います。

+2

は間違って0.1.1と0.1.10を注文します。 –

+0

@RandyLaiあなたは0.0.19と0.0.2を処理できる正しい順序を取得する方法を知りましたか? –

+1

これは私が使用したものです: 'git ls-remote --tags | sed 's。*/\(。* \)$ | \ 1 |' | grep -v '\ ^' | sort -t。 kl1nr -k2,2nr -k3,3nr' –

5
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 

これら二つはあなたに最新のタグを取得するには、ヘッドパイプ用nフラグで値を変更することで、リストを増やすことができます。トップ10の最新リストhead -n10

+1

出力タグ名から '' 'を取り除くために' -r'を 'jq'呼び出しに追加します –

+0

@Marcin、roger that。thnx! –

+0

これは、 0.0.19と0.0.2のようなもので失敗する –

関連する問題