2010-07-13 67 views
1

有沒有任何方法可以在Mercurial中驗證/驗證檢入?我想在整個組織(60多位開發人員)中推廣HG,並且希望能夠確保每個人的簽到都來自正確的用戶,並且他們都是正確的格式。驗證水銀檢查

在試用期間,我們發現一些用戶使用完全不同的用戶名(複製其他人的.hgrc文件)簽入,而其他用戶使用多個不同版本的名稱(名字,全名,電子郵件地址等)使用不同的客戶。

我們可以添加一個鉤子來強制用戶名的格式,但它仍然不能保證它是正確的用戶。 Mercurial有沒有什麼可以解決這個問題,或者我只是堅持CVS/SVN的思維方式?

謝謝, 戴夫。

+0

[驗證Mercurial變更集來自他們說他們來自誰]的可能重複(http://stackoverflow.com/questions/3284642/verifying-mercurial-changesets-are-from-who-they-say-theyre -from) – 2012-01-10 16:43:47

回答

4

大多數情況下,您都處於CVS/SVN思維方式 - 如果您的員工不誠實,則無論如何您都會受到影響。 :)不過,也有其他人在使用各種技術來處理這幾個方面:

  • Mozilla和其他一些添加了一個可視pushlog顯示誰動了每個CSET到每個回購,那麼你會得到一個一路上
  • 使用gpg extension可以確保csets簽名和寫一個快速changegroup掛鉤,以確保進入受保護的回購協議的csets被他們的作者簽字
  • 你可以寫一個鉤子默許的步驟,將名稱的電子郵件部分與$REMOTE_USER變量(http)或$USER(用於ssh)進行比較,並要求它推動用戶。

這些都不會阻止虛假提交,但是您可以阻止虛假提交進入一個有保護的回購。

雖然如此,實際上,每個人(包括我)都認爲這不是問題。一個會在不同的機器上產生許多相同名稱的變體,但任何由用戶名(流失等)工作的命令都會使用別名映射來幫助您將它們分組。

+1

我沒有任何員工是不誠實的,但有些人可能有點不小心:-) 這通常是我在想的 - 我們實際上已經實現了一個類似的鉤子。我確實喜歡推送日誌的想法 - 很清楚誰將更改傳播到中央服務器。 謝謝! – daveof 2010-07-13 16:17:11

+0

下面是mozilla的pushlog示例:http://hg.mozilla.org/mozilla-central/pushloghtml SonicHG用於做類似的事情,但我不知道它是否仍然保留。只需將'changegroup'鉤子附加到網上提供的pushlog.html文件就可以實現其最基本的功能。 – 2010-07-13 16:25:02

3

首先,您不能在提交時驗證這一點,因爲一旦將變量集推送到您的一箇中央存儲庫,您只能訪問變更集。

因此,您可以驗證推送cset的人也是提交者(通過匹配http或ssh身份驗證)。這在某種程度上是有限制的,因爲當人們推送其他開發人員的變更集時,這會很有用

您可以使用pgp擴展名(來自hgext)在提交後顯式簽署變更集,但是如果您想爲每個變更集執行此操作,它都是一種拖動。

commitsigs是另一種擴展,它對簽名採取了不同的方式。它將簽名直接嵌入到變更集中,從而避免了額外變更集的混亂。這爲每個變更集增加了大約2 KB的開銷。

Mozilla使用pushlog來跟蹤誰推送了什麼。這使您可以查看服務器上的提交歷史記錄(但僅限於此),以查看誰推送了哪組變更集,從而爲您提供比通常情況更好的紙質記錄。這也可以通過changegroup通知來提供,如果你包含在電子郵件中進行推送的人(這是Python完成轉換後將執行的操作)。

所以這些是技術解決方案。另一方面,想一想更多:你已經給了一羣人推動訪問你的中央倉庫。如果他們想要的話,他們已經可以和你的樹混在一起了。如果你信任他們將東西推入中心樹,你能不能相信他們有最好的意圖將自己的名字放在他們的變更集上?