2010-06-10 2 views
1

我們剛剛從SVN切換到Mercurial,但現在我們遇到了與工作流相關的問題。例如: 我有我工作的存儲庫的本地克隆。我正在對我們的代碼庫進行一些高度實驗性的更改,在我確定它按照預期的方式工作之前,我不想提交這些更改,我甚至不想在本地提交它。現在,同時,我的同事已經做了一些重要的改進/缺陷修復,這是我需要的。他將他的提交推送到我們的主要存儲庫。問題是,如何在不需要我必須提交所有更改的情況下將自己的更改合併到工作空間中,因爲我需要他的更改來測試我自己的代碼?將更改合併到未提交更改的工作區

我們在完全相同的工作流程中遇到的更多日常問題是我們在存儲庫中有幾個配置文件。每個開發人員都會對配置文件進行一些小環境特定更改,但不要提交更改。這兩對未提交的文件阻礙了我們對工作區進行任何合併,就像上面的例子一樣。理想情況下,配置文件可能不應該存放在存儲庫中,不幸的是,這就是它在這裏不可知的原因。

回答

1

有兩種操作,因爲你已經發現,這使得從一個人的改變提供給他人(或許多,一邊。)

還有的拉動,從的其他一些克隆發生變化存儲庫並將它們放入您的克隆。

有推動,它會從您的存儲庫中進行更改並將其放入另一個克隆。

就你而言,你的同事已經將他的改變推向了我認爲是你的儲存庫的中心主人。

他已經做到了這一點之後,你可以拉的最新變化下到你的資料庫,並把它們合併到你的分支。這將包含任何錯誤修正或將您的同事修改到實驗代碼中。

這給你住在其他同事的發展目前在你的項目,並沒有釋放你的實驗代碼,直到它準備的自由(甚至在所有。)

所以,只要你留下來遠離Push命令,你很安全。

當然,這還假定沒有人直接從您的存儲庫的克隆拉動,如果他們這樣做,那麼他們當然會得到你的實驗性的變化,但它聽起來並不像你已經設定,這個(而且極不可能)

至於配置文件,這樣做的典型方法是您只將一個主文件模板提交到存儲庫中,使用不同的名稱(即一個額外的擴展名.template或類似的),和然後將真正的配置文件的名稱到忽略濾波器。

然後,每個開發人員都必須製作他自己的模板副本,重新命名並以任何他們想要的方式進行更改,而不會將數據庫連接字符串,密碼或本地路徑提交到存儲庫。

如有必要,請提供一個腳本,以幫助開發人員在真實的配置文件中生成冗長而複雜的配置文件。

1

關於您的實驗性更改,您應該提交它們。經常。 只需將它們提交給您不推送的克隆即可。 You only pull to merge無論您需要從其他倉庫獲得哪些更新。

至於配置文件,不要提交它們。
提交模板文件以及能夠從模板生成完整配置文件的腳本。
這樣,開發人員將只修改「private」(即未提交)配置文件和他們自己的私有值。

3

如果您不想克隆,您可以按照以下方法進行。

hg diff > mylocalchanges.txt 
hg revert -a 
# Do your merge here, once you are done, import back your local mods 
hg import --no-commit mylocalchanges.txt 
1

如果你知道你提交的改變不會合並碰撞承諾,你正在創建 - 那麼你可以做以下...

1)擱置未提交更改

2)做拉和合並

3)取消擱置未提交的變化

保質有效地存儲您提交的修改遠爲成DIFF(R elative上次提交)然後回滾您的本地工作區中的這些文件。然後取消擱置,然後應用該差異,帶回未提交的更改。

TortoiseHg等工具已內置貨架。