2

リモートgit リポジトリ内の特定のタグと同じコミットにあるすべてのタグを見つけようとしています。可能であれば、リモートのローカル コピーを複製したくありません。

たとえば、2 つのタグrelease/latestrelease/1.00両方が同じコミットを指しているリポジトリがあります。したがって、タグを指定するrelease/latestと、スクリプトに返してもらいたいrelease/1.00.

ls-remoteリモートタグをリストするために使用しています:

git ls-remote --tags gitolite@myserver.example.org:/base.git

このコマンドは戻ります

ad759      refs/tags/release/1.00
0e9d0      refs/tags/release/1.00^{}
de388      refs/tags/release/latest
0e9d0      refs/tags/release/latest^{}

(スペースを節約するためにコミット ハッシュを短くしました。)

これを解釈する方法がわかりません: 各タグに 2 行あるのはなぜですか? 「本物の」タグを指しているのはどの参照ですか? の付いていないタグは無視する必要があります^{}か?

4

1 に答える 1

1

で終わるタグは、git コミットに対する^{}実際の (軽量) タグです。一方、このサフィックスのないものは (PGP) 署名または注釈付きのものです。

ls-remoteリモート リポジトリでは、次のように の出力を解析する必要があります。

tags=$(git ls-remote --tags gitolite@myserver.example.org:/base.git)
REV=$(echo "$tags" | sed -n 's#\s*refs/tags/release/latest$##p')
echo "$tags" | sed -n "s#$REV\s*refs/tags/##p"

ローカル(1.7.0)リポジトリでは、単純に使用できます

git tag --points-at release/latest

git show-ref --tags -d1.7.0 より前のバージョンでは、リモート ソリューションでls-remote を置き換えます。

于 2013-05-03T23:56:15.060 に答える