2014-01-16 40 views
19

私はシェルスクリプトを使ってGitブランチを作成する必要がありますが、ブランチが存在する可能性があるので、私はそれを認識する必要があります。指定されたGitブランチが存在するかどうかを確認するシェルスクリプト?

if [ `git branch | grep $branch_name` ] 
then 
    echo "Branch named $branch_name already exists" 
else 
    echo "Branch named $branch_name does not exist" 
fi 

をしかし、問題は、私はgrep nameその後、branch-nameが一致するだろう名前で分岐した場合grepコマンドは、つまり、名前を正確に一致せずにブランチ名を見つけたです:現在、私は使用しています。

これを行うには良い方法がありますか?

ありがとうございます!

+0

既に回答済みですか? http://stackoverflow.com/questions/5167957/is-there-a-better-way-to-find-out-if-a-local-git-branch-exists – grebneke

+0

grepを強制的に行全体に一致させることができます: gitブランチ| grep -E "^ \ $ branch_name $" ...または何か.. – stellarhopper

答えて

34

あなたはいつも\<\>のような名前の周りに単語の境界を使用しますが、代わりにGitはあなたのための仕事をやらせることができます:、

if [ `git branch --list $branch_name `] 
then 
    echo "Branch name $branch_name already exists." 
fi 
+3

["' 'git branch --list $ {BRANCHNAME}' "] – JeffCharter

+1

@JeffCharterは常にこれをtrueに評価しませんか? –

+1

自動フォーマットの問題でした(バックマティックはコードマーカーに変換されました)if ["git branch --list master \' "];その後エコーハイ;答えは実際には常に真実を返します...それは私のミスポストと基本的に同じです。 – JeffCharter

4

私はヒースのソリューションを好きですが、あなたはまだgrepするためにパイプする場合はあなたは、サブストリングをマッチング排除するために、次のような正規表現のアンカーを使用することができます:あなたは、コマンドの出力がインデントされるのでspace文字クラスを使用する必要が

if [ `git branch | egrep "^[[:space:]]+${branchname}$"` ] 
then 
    echo "Branch exists" 
fi 

注意。

+2

あなたが支店にいる場合、最初に星があります。適切なマッチ 'git branch | egrep "^ \ *?[[:space:]] + $ {BRANCH} $" ' – designermonkey

関連する問題