2011-03-11 81 views
4

在開發過程中,我們將所有* .resx文件發送給一個翻譯器。翻譯者通常需要一週的時間才能發回文件。在此期間,不允許添加,刪除或更新任何resx文件。如何防止Mercurial提交/推送某些文件?

如何配置mercurial執行該策略?

我們的設置:每個開發人員都使用我們中央存儲庫的本地克隆。

很高興有:

  1. 我會轉「政策」和關閉每隔幾個星期。所以理想情況下,我希望在某個地方容易配置並影響所有開發者的東西。

  2. 我寧願在本地存儲庫級別執行該策略,然後在中央存儲庫級別執行該策略,因爲如果我們阻止中央存儲庫上的「推送」,則開發人員將很難撤銷已在本地提交的更改集。

感謝


UPDATE:在翻譯過程

更多信息:

合併是不是這裏的問題。翻譯者不會更改我們發送給他的文件。我們向他發送了一堆語言中立的.resx(form1.resx),並返回了一組語言特定的resx(form1.FR.resx)。

爲什麼要添加新的resx?當我們向我們的應用程序添加一個新的UI時,添加一個resx。如果我們在翻譯軟件包發送後這樣做,翻譯人員將不會知道新的用戶界面,我們最終將得到一個沒有翻譯的新UI。

爲什麼要防止更新resx?如果開發人員將標籤值從「打開」更改爲「關閉」,他已經做出了非常重要的語義變化。如果他在翻譯包發送後這樣做,我們將不會得到正確的翻譯。

回答

4

除非您可以控制其桌面計算機(使用pretxncommit鉤子),否則您不能停止對文件進行更改以改變.resx文件,即使此時它可以輕鬆繞過。在push時使用pretxnchangegroup掛鉤對中央服務器進行檢查更爲正常,但你說得對,他們必須修復任何變更集並重新推送,這是高級用法。無論哪種情況,您都會使用AclExtension來強制實施限制。

下面是兩種替代方式去了解這一點,可以先制定出更好的爲你:

  1. 克隆你的倉庫在翻譯過程的開始,開發商警告獨自一段時間離開的.resx,應用翻譯人員完成後的工作,然後將這些更改合併到merge command that always gives the incoming changes priority:X的主開發庫中。然後使用簡單的hg log命令查找.resx中剛剛被覆蓋的所有更改並告訴開發人員重新添加它們。在這個時候嘲笑他們。

交替

  1. 充分利用.resx文件較大外庫的Subrepository。然後在禁止期間關閉對該resx存儲庫的寫入訪問權限。開發人員可以在外部存儲庫中進行提交,但不能在內部進行提交,但克隆仍然可以像往常一樣完成。

對於什麼是值得的,其他人都用簡單的合併來處理這個問題,.resx是(XML)文本,它合併得很好。

在使用DVCS時,並不總是很容易反映svn的體驗,但無論如何通常有更好的選擇。

+0

我將檢查AclExtension。 resx文件分散在項目文件夾中的多個目錄中,子存儲庫在該上下文中不起作用。我沒有做所有這些來緩解合併過程。我更新了我的問題,並提供了更多信息,說明我們爲什麼這樣做 – Sylvain 2011-03-11 15:33:25

+0

你的解釋是有道理的。您可以使用AclExtension在推送級別執行您想要的操作。我仍然認爲這是一種非常普遍的情況,而其他人都設法解決這個問題而不訴諸於阻塞鉤應該讓你停下來。例如,以下是Mercurial項目本身的方式,它依賴於編碼期間和之後發生工作的大量志願者翻譯人員處理它:http://mercurial.selenic.com/wiki/TranslatingMercurial – 2011-03-11 16:03:26

0

您可以將* .resx添加到hgignore文件

+0

我不喜歡這樣因爲開發者不會注意到他對resx的改變被忽略了。如果一個開發者在翻譯過程中「必須」改變一個有用的理由,我們必須知道,因爲翻譯者發回文件時必須完成這項工作。 – Sylvain 2011-03-11 15:10:14

+2

它也不起作用。只有在考慮** untracked **文件時纔會查閱'.hgignore'文件。一旦文件已經被添加/追蹤(就像這些.resx文件一樣),那麼'.hgignore'完全沒有效果。 – 2011-03-11 15:50:49

相關問題