如何以編程方式確定當前簽出的Git分支在Unix或GNU腳本環境(例如Linux發行版,Cygwin,OSX)中,確定當前在工作目錄中檢出哪個Git分支的最佳方法是什么?這種技術的一個用途是自動標記一個版本(就像svnversionSubversion一樣)。另請參閱我的相關問題:如何以編程方式確定Git簽出是否為標記,如果是,那么標記名稱是什么?
3 回答

慕森王
TA貢獻1777條經驗 獲得超3個贊
正確的解決方案是看看contrib / completions / git-completion.bash是否為bash提示做了__git_ps1
。刪除所有額外內容,例如選擇如何描述分離的HEAD情況,即當我們在未命名的分支上時,它是:
branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||branch_name="(unnamed branch)" # detached HEADbranch_name=${branch_name##refs/heads/}
git symbolic-ref用于從符號引用中提取完全限定的分支名稱; 我們將它用于HEAD,目前已檢出分支。
替代解決方案可能是:
branch_name=$(git symbolic-ref -q HEAD)branch_name=${branch_name##refs/heads/}branch_name=${branch_name:-HEAD}
在最后一行我們處理分離的HEAD情況,使用簡單的“HEAD”來表示這種情況。
Junio C. Hamano(git maintainer)博客文章,從2013年6月10日起以編程方式檢查當前分支,更詳細地解釋了為什么(和hows)。

慕俠2389804
TA貢獻1719條經驗 獲得超6個贊
有沒有人看到Git描述你所在的分支有什么問題?
git rev-parse --symbolic-full-name --abbrev-ref HEAD
這可以在$()中使用,并在Bash,Powershell,Perl等中輕松傳遞。如果您在提交中有多個分支,并且如果您當前不在分支上,那么它不會被欺騙,它只是簡單的回復“HEAD”。
或者,您可以使用
git symbolic-ref --short -q HEAD
哪個會給你相同的輸出,但如果你被分離,它將不會返回任何內容。如果你想在分離時發生錯誤,這個很有用,只需刪除-q即可。
- 3 回答
- 0 關注
- 789 瀏覽
添加回答
舉報
0/150
提交
取消