2009-09-04 73 views
7

我有一個長期存在的問題:在工作中我們使用mercurial作爲DSCM,但我們無法弄清楚如何保持我們的配置文件同步。Mercurial工作流問題(如何處理配置文件)

問題是,我們想要跟蹤配置文件,並希望能夠在開發人員之間交換配置文件內容,但每個開發人員都想讓他的connectionStrings部分獨立於其他人。

是否有可能以某種方式保持配置文件跟蹤,但省略連接字符串部分時拉和推?

我們嘗試添加配置文件到.hgignore,但是當有人添加一些重要的配置文件,我們必須通過電子郵件分享。

謝謝。

回答

6

如果您無法通過自定義設置來處理它,只需在回購庫中擁有一個基本配置文件即可。

然後讓每個開發人員把它自己的定製放在最上面(用mq)。如果定製不太侵入,合併總是會順利的。

還有另外一種方法,按下時,你要記住不要推合併分支,你多次合併您的自定義,但後來(tX是主線,c1是定製)

t1-t2-t3-t4-...-tN 
    \ \  \ \ 
    c1---c2-----c3--c4 

的開發需求並推動只有tX作爲父母的變更,cX絕對不應該逃避回購。

1

處理它的非DVCS方式是設置你的構建過程,從獨立的配置文件中讀取連接字符串,然後在構建過程中對其進行預處理(在java中,你可以使用ant或maven從屬性文件,我不知道MS-land)。

4

我不知道您的配置文件的詳細信息,但如果您可以包含其他文件,請創建一個config_local文件以保存開發人員特定的設置。將該文件添加到.hgignore。常用設置進入主配置文件,其中包括config_local文件。如Ken所說,如果包含不是一個選項,那麼在構建步驟中預處理可能是一條可行的路。

3

您可以使用Mercurial Queues來做到這一點。所以你要做的是在hg下(具有真實姓名)擁有「真實」配置,開發人員可以使用位於頂部並使用mq維護的補丁來維護其定製。

然後,當開發人員需要更新真實配置時,他們會彈出他們的補丁程序,它將所有自定義項保存在堆棧中,對配置進行更改並提交+推送它。

假定所有其他開發人員都沒有在自己的隊列中重寫這些特定更改,他們將在下次更新時收到它們。

0

這有點混蛋,但您可以使用KeywordExtension自動擴展令牌。在你的配置文件中加入這樣的內容:

db.host = $DBHOST$ 
db.host = $DBUSER$ 
db.host = $DBPASS$ 

然後在他們〜/。hgrc文件的用戶應該是這樣的:

[extensions] 
hgext.keyword= 
[keyword] 
# expand keywords in all python files in working dir 
**.conf = 
[keywordmaps] 
DBHOST = dev.server.internal 
DBUSER = myname 
DBPASS = mypass 

生產,當然會有它自己的.hgrc。

該計劃將花費每個人一點點設置時間一次,但之後它應該是自動的。如果用戶不想設置自己的專用連接字符串,默認設置可以在系統方面的/ etc/mercurial/hgrc文件中。

1

將連接字符串放在不同的文件中。例如在web.config中:

<connectionStrings configSource="connections.config" /> 

然後你有一個connections.config文件,連接字符串,您可以從儲備庫中排除,從而讓每個開發人員修改自己的心臟的內容。

如果你想要一個'reference'版本的connections.config文件,只需添加另一個在源代碼控制下的文件connections.example.config,並將其用作你的模板版本。