2011-10-27 79 views
9

我想停止自己意外地將任何東西交給主分支,除非我確定。所以我試了這個腳本來確定我在哪個分支上,但是有問題。當我創建一個新的分支git name-rev即使我在另一個分支上返回主設備如何使用git鉤子預先提交來停止提交主人

$ git branch 
    ignore 
    master 
* set_support 
$ git name-rev --name-only HEAD 
master 

這是我的腳本。

#!/bin/sh 
# Check to see if we are on master branch. Stop accidental commits 
if [ "`git name-rev --name-only HEAD`" == "master" ] 
then 
    if [ -f i_want_to_commit_to_master ] 
    then 
     rm i_want_to_commit_to_master 
     exit 0 
    else 
     echo "Cannot commit to master branch Adrian" 
     echo "Remember to create file 'touch i_want_to_commit_to_master' to commit to master" 
    fi 
    exit 1 
fi 
exit 0 

對於馬克:我重建了最新的穩定標籤和相同的結果git。它僅在對新分支進行提交後才起作用。

$ mkdir gittest 
$ cd gittest 
$ git init 
Initialized empty Git repository in /home/adrian/gittest/.git/ 
$ touch file1 
$ git add file1 
$ git commit 
[master (root-commit) 7c56424] New file 
0 files changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 file1 
$ git branch 
* master 
$ git checkout -b new_branch 
Switched to a new branch 'new_branch' 
$ git name-rev --name-only HEAD 
master 
$ git --version 
git version 1.7.7.1 
$ git branch 
    master 
* new_branch 
$ touch file2 
$ git add file2 
$ git commit 
[new_branch 1e038fb] new file 
0 files changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 file2 
$ git name-rev --name-only HEAD 
new_branch 
+0

您使用的是哪個版本的git,以及哪種操作系統?如果你真的複製並粘貼了,'git branch'和'git name-rev HEAD'的結果看起來像一個(令人驚訝的)錯誤。 –

+0

我從源代碼構建混帳 - 最後構建了$ git的描述 v1.7.7-RC3 $ git的--version Git版本1.7.7-RC3 $ UNAME -a Linux的iceweasel.bluedreamer 2.6.40.3-0.fc15 .x86_64#1 SMP星期二8月16日04:10:59 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux –

回答

11

該命令用於查找提交的友好名稱。發生的事情是HEAD首先解決提交的問題,然後確定名稱。我猜這是因爲它首先出現在git log --decorate會碰到的名字中,隨意挑選名字的主人。

我只想解析的git branch輸出在測試:

"`git branch | grep \* | cut -f2 -d' '` == "master" 

或更直接的方式是:

$(git symbolic-ref HEAD 2>/dev/null) == "refs/heads/master" 
+1

酷 - 感謝亞當 - 我做了一個小小的改變,但它現在工作,如果[「$(git symbolic-ref HEAD 2>/dev/null)「==」refs/heads/master「] –

+0

不錯..我會爲其他人的利益編輯答案。 –

8

正如你可以使用git rev-parse作爲this answer建議的替代方案。因此,如果表達式是:

"$(git rev-parse --abbrev-ref HEAD)" == "master" 
相關問題