2017-05-24 52 views
0

我有兩個遙控器,一個用於生產,一個用於GitHub。由於我必須將某些文件推送到不能登陸GitHub的作品,因此我想限制一個分支以避免發生意外。限制推送某個分支的某些遙控器

有沒有辦法告訴我的混帳客戶端,它應該從未分支「部署」推到遠程「github上」,只有推動這個分支「生產」?

回答

2

kowsky's answer是正確的,只要你的Git至少是1.8.2(如果不是你應該升級:-))。但是,鏈接的例子是錯誤的。

pre-push hook被調用,有兩個參數,其中規定:

  • 遙控器的名稱,如果指定的遠程使用,否則URL
  • 的URL(的擴展名爲遠程結果,如果一個名爲遠程使用)

什麼是要推,這是你在你運行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來禁用你的鉤子。

4

Git Hooks是你在找什麼。您可以設置一個服務器端預先接收掛鉤,該掛鉤適用於試圖推送到您的回購站的所有人,根據當前分支或類似的本地預推鉤接受或拒絕推送。後者的例子可以參見herehere

相關問題