次のコマンドを使用して、リポジトリにbranch-name
のlocalgitブランチが存在するかどうかを確認しています。これは正しいです?もっと良い方法はありますか?
スクリプト内でこれを行っていることに注意してください。このため、可能であれば 配管コマンドを使用 にしたいと思います。
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
私の知る限り、それがスクリプトでそれを行う最良の方法です。それにさらに追加するものがあるかどうかはわかりませんが、「そのコマンドはあなたが望むすべてをする」という答えが1つあるかもしれません:)
注意が必要な唯一のことは、ブランチ名に驚くような文字が含まれている可能性があるため、<branch-name>
を引用することです。
検索エンジンで「ブランチが存在するかどうかgit check」を検索すると、このページが最初に表示されます。
私は欲しいものを手に入れましたが、元の投稿は2011年からだったので、更新された回答を提供したいと思います。
git rev-parse --verify <branch_name>
これは基本的に受け入れられた答えと同じですが、「refs/heads /」と入力する必要はありません
ほぼそこに。
--verify
と--quiet
を省略すると、ブランチが存在する場合はハッシュを取得し、存在しない場合は何も取得しません。
それを変数に割り当て、空の文字列を確認します。
exists=`git show-ref refs/heads/<branch-name>`
if [ -n "$exists" ]; then
echo 'branch exists!'
fi
ここでgit show-branch
を使用できると思います。
$ git show-branch --list
[master] test
* [testbranch] test
$ git show-branch testbranch
[testbranch] test
$ echo $?
0
$ git show-branch nonexistantbranch
fatal: bad sha1 reference nonexistantbranch
$ echo $?
128
だから、$? == 0はブランチが存在することを示し、refs/heads /の配管を掘り下げる必要はまったくありません。 -r
をshow-branchに渡さない限り、ローカルブランチでのみ動作します。
git show-ref --quiet refs/heads/$name
をお勧めします。
--quiet
は、出力がないことを意味します。これは、終了ステータスをきれいにチェックできるので良いことです。
refs/heads/$name
はローカルブランチに制限され、フルネームに一致します(そうでない場合はdev
はdevelop
に一致します)
スクリプトでの使用:
if git show-ref --quiet refs/heads/develop; then
echo develop branch exists
fi
スクリプトで使用する場合:
git show-ref -q --heads <branch-name>
これは、0
がローカルブランチとして存在する場合にのみ、<branch-name>
を終了します。
例:
if git show-ref -q --heads <branch-name>; then
echo 'Branch exists'
fi
Windowsバッチスクリプトでは少し異なりますが、
git rev-parse --verify <branch>
if %ERRORLEVEL% == 0 (
echo "Yes"
) else (
echo "No"
)
最初の質問の「更新」に対する「提案された編集」のレビューの結果は「コメントまたは回答として書かれるべきだった」でしたので、ここに投稿しています:
別の方法 を提案すると、ブランチだけでなく、そのような名前の参照も検証されます @ jhuynh 。
git rev-parse --verify <reference-name>
# $? == 0 means reference with <reference-name> exists.
最初の静止に関する「更新」の問題の説明:
'master.000'がタグにすぎないことを想定して確認します。このようなローカルブランチは存在せず、grepは1つのエントリを返します。これはタグです。そのようなローカルブランチが存在しない場合でも、参照が存在する場合、rev-parseは0を返します。 @ paul-s で述べられているとおり、これは誤った一致です
$ git show-ref |grep master.000
f0686b8c16401be87e72f9466083d29295b86f4a refs/tags/master.000
$ git rev-parse --verify master.000
f0686b8c16401be87e72f9466083d29295b86f4a
$ echo $?
0
git is_localbranch
と呼びましょう(.gitconfig
にエイリアスを追加する必要があります)。
使用法:
$ git is_localbranch BRANCH
ソース:
git branch | grep -w $1 > /dev/null
if [ $? = 0 ]
then
echo "branch exists"
fi
うんgit rev-parse []… https://git-scm.com/docs/git-rev-parse uは引数と関数のセットを見つけることができます。
git rev-parse --verify <branch-name>
私の場合、git show-ref
もgit rev-parse
も機能しません。
$ git --version
git version 2.21.0
$ git show-branch --list
* [master] mybranch commit
$ BRANCH_NAME=mybranch
$ git rev-parse --verify $BRANCH_NAME
fatal: Needed a single revision
$ git show-ref refs/heads/$BRANCH_NAME
<no otput>
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch not exists
私はこれで終わった
$ BRANCH_NAME=mybranch
$ SHOW_ALL=`git show-branch --all | grep -w $BRANCH_NAME`
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch exists
スクリプトファイルでもできます
#!/bin/sh
BRANCH_NAME=mybranch
if grep -Fqe $BRANCH_NAME << EOF
`git show-branch --all`
EOF
then
echo "$BRANCH_NAME exists"
else
echo "$BRANCH_NAME not exists"
fi
ブラウザで使用したかったので、ブランチ名の有効性を確認できる小さなアプリを作成しました。 gitによってサポートされているため、何を取得しているのかがわかります。
https://branch-checker.herokuapp.com/validate?branch=not//valid