2013-05-31 96 views
4

腳本git,我需要找出簽出的分支名稱。到目前爲止,它似乎是唯一的「可靠」的方式是git branch | sed -n '/^\* /s///p'。 (由於類似於color.branchcolumn.branch在.gitconfig中的東西引起的恐慌引用;它根本不可靠。)我發現的唯一其他東西是git name-rev,但似乎返回指向HEAD的第一個(按名稱排序)分支:git管道告訴檢出分支

> git checkout master 
> git checkout -b another 
> git checkout master 
> git name-rev HEAD 
HEAD another 

有沒有比sed -n '\#^ref: refs/heads/#s###p' .git/HEAD更好的東西來找出簽出的分支?

+0

似乎類似於http://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked -out-git-branch –

回答

5

這裏有一個小git調用我在一對夫婦的腳本中使用,要麼還給refs/heads/branchname,或者,如果你不是一個分支,它給你的分離的頭的SHA:

cur_branch=$(git symbolic-ref HEAD 2>> /dev/null || git rev-parse HEAD) 

卸下refs/heads/前綴應該是相當簡單的,如果你需要它...

+4

'--short'負責前綴,'-q'禁止stderr上的輸出。 –

+0

'git symbolic-ref -q --short HEAD' for the lazy :) – kgadek

6

只輸出分支你是在用:

git rev-parse --symbolic-full-name --abbrev-ref HEAD 

不應該有任何麻煩,如果你還擁有多個分支機構,如果你沒有任何分支,它只是給你HEAD

+0

這個和twalberg的答案對於所述的問題是正確的,我已經提出了兩個問題。如果可以接受多個答案,我會在這種情況下進行。 'git symbolic-ref'贏了,因爲我更喜歡分離HEAD的非零退出代碼。我知道,沒有規定的要求。 –