我們有一個使用OpenShift的Git遠程(用於生產)。只允許將一個分支推送到遠端
本地,我想確保只有主分支可以推送到這個遠程。我是否應該採取特殊措施來確保這種情況發生,還是應該只依靠Git默認設置?
我99%確定生產Git遠程只查看主分支。所以我的理解是,我們可以在本地推動不同分支的唯一方法是這樣的:
git push prod_remote a_feature_branch:master
所以我的問題是 - 有沒有辦法阻止別人對我的團隊這樣做(沒有強制標誌)?
我們有一個使用OpenShift的Git遠程(用於生產)。只允許將一個分支推送到遠端
本地,我想確保只有主分支可以推送到這個遠程。我是否應該採取特殊措施來確保這種情況發生,還是應該只依靠Git默認設置?
我99%確定生產Git遠程只查看主分支。所以我的理解是,我們可以在本地推動不同分支的唯一方法是這樣的:
git push prod_remote a_feature_branch:master
所以我的問題是 - 有沒有辦法阻止別人對我的團隊這樣做(沒有強制標誌)?
在接收側,即接收提交的Git有沒有概念的分支名稱,如果有的話,貼在提交上發送的Git。它只知道它已經收到了一些對象,然後是一個請求來更新一些引用。如果這些引用拼寫爲refs/heads/whatever
,則它們是名爲whatever
的分支的分支名稱創建,刪除或更新操作。
因此,在收到方面,答案是否定的:沒有辦法阻止任何人這樣做。如果他們可以完成提交到接收Git的提交,他們可以提交任何提交以及他們喜歡的任何參考名稱更新。您可以使用任何身份驗證數據(例如,從ssh或像Gitolite這樣的訪問控制系統)檢查提交和/或參考名稱更新,但您對它們的任何內容都不知曉原點,您只有哈希ID和名。
在發送方,你可以使用pre-push
掛鉤做更多的事情。預推鉤使用:
$1
:遠程名稱,如果推送使用命名遠程;$2
:對應於$1
的URL(如果不使用遠程命名,兩個命令行參數是相同的),和在標準輸入,線的流,每push
的Refspec一行與具有四個項目的每一行:
refs/heads/branch
)(見the githooks documentation細節)。然而,發送端掛鉤取決於每個發送者,因爲每個人都可以完全控制她/他的存儲庫,並且就此而言,是否調用任何掛鉤。
如果大家誰都會自願選擇採用推,你可以爲他們提供了一個鉤子,將:
$1
)和/或URL($2
);refs/heads/master
;
謝謝我將盡快研究這件事,欣賞詳細信息 –
事實上,在許多主機系統中,您*可以*防止人們「推動主人」,以防止他們從*修改*分支指針。換句話說,你不會阻止他們在master之上添加兩個新的提交,但是你可以阻止他們將master分支指針移動到這兩個提交的最後,實際上你可以防止它們包含*更多的提交在主人身上。在GitHub上,你可以使用「受保護的分支」來完成一些操作,BitBucket也有類似的功能。 –
@ LasseV.Karlsen:當然,但這並不是他想要的:他想確保沒有人跑'git push remote head:master','git push remote foo:master'或類似的東西,只允許' git推遠程主:主'。受保護的分支僅意味着某些*用戶*(即那些身份驗證痕跡遺留下來的人)可以推送任何*。 – torek