我在某些情況下需要強制Mercurial用戶在允許任何hg commit
之前運行hg pull -u
,即hg pull
將意味着傳入隊列是空 - 而且我還希望這個人使用分支的頭版。Mercurial:在「hg commit」之前強制執行「hg pull -u」
我該如何設置這樣的限制?
(我深知,這違背了DVCS設計的核心部分)
我在某些情況下需要強制Mercurial用戶在允許任何hg commit
之前運行hg pull -u
,即hg pull
將意味着傳入隊列是空 - 而且我還希望這個人使用分支的頭版。Mercurial:在「hg commit」之前強制執行「hg pull -u」
我該如何設置這樣的限制?
(我深知,這違背了DVCS設計的核心部分)
通常善變不會讓你推一個開放的頭到服務器,而不使用-f標誌(力)。你可以編寫一個鉤子來自動提取,但由於服務器不知道你有什麼,所以不能強制服務器端。有對善變的有關此方案的網站上的文章: https://www.mercurial-scm.org/wiki/TipsAndTricks?highlight=%28heads%29#Prevent_a_push_that_would_create_multiple_heads
你可以問你的開發人員安裝
[hooks]
pre-commit = hg pull -u
在他們的配置文件
(它可能應該因爲這種安裝在每個倉庫.hg/hgrc
文件工作流是特定於存儲庫的)
這使得Mercurial有點像Subversion一樣:你的開發者只會有一個突出的變更集。但是請注意,只要有人推送到服務器,hg pull -u
無法更新到新的分支提示,因爲它將跨越分支(拓撲分支)來執行此操作。所以在這一點上需要適當的合併(或者rebase,見hg pull --rebase
)。
正如亞當所說,也許你真正需要做的是防止多個頭(每個分支)。這是我們所做的,使用Netbeans的'forbid_2head'鉤子(從這裏鏈接https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads)
結果是鉤子阻止任何在分支上創建多個頭的推送(所以匿名/默認分支上的一個加每個在命名分支上)。這有效地在提交之前強制拉動,因爲你必須拉動,在本地獲得兩個頭,然後合併或重新綁定以將其移除。
注,鉤是在服務器/主回購
要求的另一種方式,這是如何實現的服務器觸發器來禁止,創造多頭推。 – 2012-04-16 14:02:11
我不能告訴你如何自動化,但我使用「hg incoming」來檢查是否需要拉動。你可能想要使用它。 – 2012-04-16 14:02:37
如果你解釋了你正試圖解決的問題,而不是你想解決的破解解決方案,那會更好。 – 2012-04-16 14:34:30