2013-12-12 39 views
4

我有一個測試我的代碼的prepush鉤子,但是,它也運行時,我做了git push --tags。有什麼辦法可以避免這種情況?git預推鉤,不要運行,如果是--tags

也許有一些方法可以檢查其常規推送或其推動--tags

更新 - 這是唯一的論據我能找到:

  • $ 1名遠程
  • $ 2到推正在做URL

回答

4

我有一個解決方案,但它的真的 kludgey。前一段時間,我設置了一個預先提交的鉤子來阻止我在文件上傳時意外使用-a。我的解決方案是讀取調用原始git命令的命令(可能也只適用於linux)。

while read -d $'\0' arg ; do 
    if [[ "$arg" == '--tags' ]] ; then 
     exit 0 
    fi 
done < /proc/$PPID/cmdline 
# and perform your check here 

Original

話雖這麼說,嘗試調用掛鉤env; git設置了一些額外的變量(從GIT_前綴開始,如GIT_INDEX_FILE)。

+0

調用'env'沒有工作,但劇本是我需要什麼。謝謝! – uglymunky

1

你可以把這個在你推鉤任何東西之前,你不想運行:

# If pushing tags, don't test anything. 
grep "refs/tags/" </dev/stdin> /dev/null 
if [ "$?" -eq "0" ] ; then 
    exit 0 
fi 

如果標準輸入的第一行是指一個標籤,它會退出0和推動。這並不完美,因爲如果你同時推送一個標籤和一個分支,它可能會首先看到標籤,而不會運行其餘的鉤子。但它在大多數情況下都會起作用。

1

您可以使用環境變量來控制它:

#.git/hooks/pre-push 
if [[ $SKIP_HOOKS ]]; then 
    exit 0 
fi 
# do things you want... 

像這樣運行命令:

SKIP_HOOKS=true git push --tags