我有兩個遙控器,一個用於生產,一個用於GitHub。由於我必須將某些文件推送到不能登陸GitHub的作品,因此我想限制一個分支以避免發生意外。限制推送某個分支的某些遙控器
有沒有辦法告訴我的混帳客戶端,它應該從未分支「部署」推到遠程「github上」,只有推動這個分支「生產」?
我有兩個遙控器,一個用於生產,一個用於GitHub。由於我必須將某些文件推送到不能登陸GitHub的作品,因此我想限制一個分支以避免發生意外。限制推送某個分支的某些遙控器
有沒有辦法告訴我的混帳客戶端,它應該從未分支「部署」推到遠程「github上」,只有推動這個分支「生產」?
kowsky's answer是正確的,只要你的Git至少是1.8.2(如果不是你應該升級:-))。但是,鏈接的例子是錯誤的。
的pre-push hook被調用,有兩個參數,其中規定:
什麼是要推,這是你在你運行git push
時指定的東西,提供給鉤的標準輸入。這是兩個鏈接的例子都被破壞的地方。
如果你運行:
git push github refspec1 refspec2 ... refspecN
則引用(一個或多個)被推那些命令行給出。
如果你運行:
git push github
(無refspecs),該組支路以推...嗯,這是複雜的,但在現代 Git的,則默認爲當前分支。
將樣品推預鉤假設該僅當前分支是被推動。由於這是現代默認情況下,樣品可能會工作,直到你意外地運行:
git push github deploy
(而上,比如說,master
),然後他們不會和你可能會難過。 :-)
要解決這些問題,請使用githook讀取,例如:
#! /bin/sh
[ "$1" = github ] || exit 0 # allow if not pushing to github
while read lref lhash rref rhash; do
case "$lref" in
refs/heads/deploy)
echo "error: attempt to push 'deploy' branch to github" 1>&2
exit 1;;
esac
done
這將使:
git push github master:deploy
(用來創建和遠程github
更新了deploy
,但使用本地分支master
,不當地分支deploy
),同時禁止:
git push github deploy:oops
(其中將本地deploy
推送到名爲oops
的分支)。
如果你希望有更復雜的規則,寫下來。請注意,如果您想防止使用git push https://github.com/...
繞過您自己的掛鉤,則可以檢查$2
以及$1
。當然,如果你決定繞過你自己的鉤子,你可以很容易地運行git push --no-verify
來禁用你的鉤子。