GNU/Linux >> Linux の 問題 >  >> Linux

現在のgitブランチの名前をシェルスクリプトの変数に取得する方法は?

* が展開されます。できることは、grep の代わりに sed を使用して、すぐにブランチの名前を取得することです:

branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')

Noufal Ibrahim が提案するように、git symbolic-ref を使用するバージョン

branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

展開について詳しく説明すると、(マルコが既に行ったように) echo $test を実行すると、エコーで展開が行われます。 $test* master を含む 次に * 通常の展開ルールに従って展開されます。これを抑制するには、マルコが示すように、変数を引用符で囲む必要があります:echo "$test" .または、エコーする前にアスタリスクを取り除くと、すべて問題ありません。 echo ${test:2} master をエコーするだけです .あるいは、すでに提案したように、新たに割り当てることもできます:

branch=${test:2}
echo $branch

これは master をエコーし​​ます 、あなたが望むように。


git-symbolic-ref を使用します git コアのコマンド。 git-symbolic-ref HEADと言ったら 、現在のブランチの名前を取得します。


Noufal Ibrahim の回答を拡張して、 --short を使用します git-symbolic-ref のフラグ 、 sed で大騒ぎする必要はありません .

私はフックでこのようなものを使用しており、うまく機能します:

#!/bin/bash

branch=$(git symbolic-ref --short HEAD)

echo
echo "**** Running post-commit hook from branch $branch"
echo

それは、「**** ブランチ マスターからポストコミット フックを実行しています」と出力します

git-symbolic-ref に注意してください リポジトリにいる場合にのみ機能します。幸いなことに .git/HEAD Git の初期の名残として、同じシンボリック ref が含まれています。ディレクトリをトラバースせずに、複数の git リポジトリのアクティブ ブランチを取得する場合は、次のような bash ワンライナーを使用できます。

for repo in */.git; do branch=$(cat $repo/HEAD); echo ${repo%/.git} :  ${branch##*/}; done

次のようなものを出力します:

repo1 : master  
repo2 : dev  
repo3 : issue12

さらに進みたい場合は、.git/HEAD に含まれる完全な参照 ブランチの最後のコミットの SHA-1 ハッシュを含むファイルへの相対パスでもあります。


Linux
  1. コマンドの出力をシェル変数に割り当てる方法は?

  2. シェルスクリプトで外部IPアドレスを取得する方法は?

  3. 独自のIPアドレスを取得し、シェルスクリプトの変数に保存する方法は?

  1. パイプからシェル変数に値を読み込む

  2. シェル変数でWebページのコンテンツを取得するには?

  3. Makefile でユーザー名を取得するにはどうすればよいですか?

  1. シェルで PYTHONPATH を取得するには?

  2. 期待されるシェルスクリプトで生成されたプロセスの終了コードを取得するには?

  3. プロセスの pid を取得し、シェル スクリプトで kill -9 を呼び出す方法は?