2010-11-03 104 views
14

我使用Git,和我設置了以下的分支機構來支持我的工作流程:我可以在git中強制執行合併分支嗎?

  • 釋放,這僅包含已發佈的軟件,
  • 測試,其中包含發佈給測試組軟件,
  • 開發,這是開發發生的地方,
  • some_topic_branch,其中功能等被添加。

主題分支從分支併合併到開發。當我們準備好測試版本時,測試會合併到開發中。當測試版本被批准用於生產時,版本合併進行測試。

這很容易設置,但我想知道git中的強制選項。例如,是否可以強制實施一個策略,即發佈分支上的唯一提交是否與測試合併,從而防止發佈分支上直接發生更改?

+0

可能重複[阻止直接提交git倉庫中的master分支並接受合併?](http://stackoverflow.com/questions/7052686/prevent-direct-commits-on-master-branch-in-git -repository-和接受,合併只) – thelem 2015-11-19 09:55:13

回答

10

那麼,有點。但我不認爲你想去那裏。

正如賈森所說,有一些鉤子可以用來防止某些行爲。在這種情況下,我們可以使用pre commit hook來防止任何人運行「git commit」。但是,這是有問題的幾種方法:

  1. 出於各種安全原因,混帳掛鉤不與倉庫分佈,所以你不能強迫人們使用你的鉤子在他們的倉庫。請記住,他們的存儲庫是他們自己的,而不是由你來決定他們在存儲庫中做什麼。
  2. 當您進行拉取或合併併發生衝突時會發生什麼?爲了解決這些衝突,你必須能夠使用我們剛纔禁用的「git commit」。

這隻會產生比解決問題更多的問題。

但是,您可以通過其他方式解決此問題。您可以創建一個執行這些原則的工作流程。例如,假設您有人A負責將測試分支合併到發佈分支中。如果只讓這個人能夠將更改推送到中央存儲庫(或者個人存儲庫是「中央」存儲庫),則他/她可以從測試存儲庫的測試分支或測試分支測試人員B(使用你的想象力)。

這裏重要的是要認識到,您可以通過設計如何溝通變化來執行策略。並非每個人都需要能夠將其更改推送到一個存儲庫。哎呀,他們甚至根本不需要推動他們的改變。測試人員/人員只要想要測試一些東西,就可以從開發人員那裏獲得變化,這樣您就可以讓測試決定何時準備好接受新的更改,而不是讓開發人員決定測試人員何時應該獲得測試東東。原理相同。

1

你應該可以通過使用一些git鉤子來強制執行此操作。

0

最近,一個框架,授權執法提出,gitolite,可以幫助把在地方各種政策,例如只允許測試者在「Testing」分支合併。

此外,gitolite建議用VREFs(在「Gitolite Update Hook exclude a repository」中解釋)定義許多「更新掛鉤」的可能性,它將控制提交到由gitolite管理的repo的提交。

但是,所有這些控件都是針對「中央」回購,而不是針對全部下游回購商在各個開發人員的工作站上進行克隆。