2

スクリプトで、タグまたはブランチがチェックアウトされたかどうかを判断したいと思います。

今のところ、私は持っています:

git describe --tags

タグ名が表示されますが、ブランチにいる場合はエラーが発生します (ステータスが返されます != 0):

fatal: No names found, cannot describe anything.

この動作に頼ることができますか、またはそうするためのより良い/より公式な方法はありますか?

知っておくべきこの方法で捕まらないケースはありますか?

4

4 に答える 4

7

git symbolic-ref HEADブランチにいるかどうかを確認し、その名前を取得するために使用できます。

> git checkout master
[....]
> git symbolic-ref HEAD
refs/heads/master
> echo $?
0

タグをチェックアウトすると、エラーが発生します。

> git checkout some_tag
[....]
> git symbolic-ref HEAD
fatal: ref HEAD is not a symbolic ref
> echo $?
128
于 2013-05-30T14:36:53.900 に答える
1

(編集)以前のものよりも優れています:

if read what where huh; test "$what" = ref:
then echo On branch ${where#refs/heads/}
else echo "not on any branch; last checkout was:"
     git reflog|sed '/checkout:/!d;q'
fi < "`git rev-parse --git-dir`"/HEAD

最後のチェックアウトがどこから来たかを教えてくれます。

git log HEAD^! --oneline --decorate

現在のコミットのすべてのシンボリック名を教えてくれます。

于 2013-05-30T14:51:34.507 に答える
0

いくつかのテストの後、あまり信頼できないことが判明しましgit describe --tagsた (あるケースでは、何かを返すブランチをチェックアウトしました)。

私は最終的に使用しました:

git branch | grep '^*'

これにより、選択したブランチが返されます。タグをチェックアウトした場合、次が返されます。

* (no branch)

私のスクリプトでは、文字列を解析して、含まれているかどうかを確認します(no branch)

于 2013-05-30T14:17:19.230 に答える
0

git status (またはgit branch ) を使用して、現在のブランチを確認します。注: あなたは常にブランチにいます: デフォルトのブランチはmasterです。

git tagを使用して、現在のブランチのタグのリストを確認します。

于 2013-05-30T12:51:36.970 に答える