2011-06-17 60 views
3

所以我已經從CVS切換到我的網站mercurial。Mercurial可用性

我遇到的最大問題是,如果我正在處理一些我不想提交的文件,我只保存它們。然後我有其他文件要推送到服務器,但是如果其他人已經對存儲庫進行了更改,並將其拉下。它要求我合併或重新綁定。這些選項中的任何一個都會導致我失去本地未做出的更改。

我讀過我應該爲本地主機上的每個項目克隆存儲庫,並在準備好時將它合併到現場。這不僅看起來很乏味,而且需要很長時間,因爲它是一個大型存儲庫。

對此有更好的解決方案嗎?

我本來希望Mercurial會看到我沒有提交我的更改(即使我已經從服務器上的內容更改了文件),所以它只是忽略了文件。

對此的任何輸入將不勝感激。謝謝!

此外,我使用hg eclipse插件來處理我的文件並從服務器上推/拉。

+1

這不是你的問題在這裏重複嗎? http://stackoverflow.com/questions/6392832/how-to-keep-uncommitted-changes-in-a-local-mercurial-repository-while-still-push –

+0

已經在你的重複問題的評論中提到過,你應該編輯問題而不是發佈新問題。請爲此或其他問題要求*關閉*。 –

回答

3

hg shelve是我認爲你的朋友。

貨架擴展提供了 貨架命令讓你選擇的變化 哪些部分在 : - (見下也許)

從概覽這是從shelve extention

工作目錄,您希望將 暫時放在一邊,其中包括修補程序區塊的粒度 。您可以稍後使用 unshelve命令恢復已擱置的修補程序段 。

Mercurial的RecordExtension對貨架延伸進行了改編 。

或者也許它的attic extension

了一組在文件夾.hg /閣樓 修補軟件模塊處理。在 任何時候你可以擱置你當前的 工作副本更改那裏或不支持 一個補丁從文件夾。

它似乎有相同的語法貨架擴展,所以我不能肯定哪一個我用

+0

我很感謝您的回覆。現在看看這兩者。在eclipse插件中使用這些擴展的經驗? – Jason

+0

抱歉,沒有。只有命令行:( –

+0

Shelve可以在TortoiseHg中使用,我知道似乎無法找到MercurialEclipse支持的擴展列表 –

2

我第二@薩姆的回答。但是,如果你喜歡使用標準的水銀,一個簡單的工作流程是

  1. 保存你的工作目錄的變化在一個臨時文件,
  2. 同步你的工作目錄與特定的版本,然後
  3. 推,拉,合併..無論你想要做什麼,哪些需要乾淨的工作副本,並且
  4. 從臨時文件中取回你的改變到工作目錄中。

例如:

$ hg diff > snapshot.patch # save your uncommited changes 
$ hg up -C     # get a clean working copy 
$ hg pull     # do things .. 
$ hg merge     # .. you need a clean .. 
$ hg commit -m "merge"  # .. working copy for 
$ hg import snapshot.patch # get back your uncommited work 
+0

這似乎比CVS中所做的更麻煩,我不得不把它賣給開發我的項目的開發人員,我真的很喜歡繼續使用mercurial – Jason

+0

是的,也許這不是告訴Mercurial初學者的事情,但是一旦你真的瞭解了DVCS的原理,這些工作步驟看起來很自然,不麻煩 - 至少是我的個人經驗無論如何,對於一個合併,你必須放棄你的修改,因爲合併本身是在工作副本中完成的,這允許你檢查並可能在它進行調整之前進行調整犯下的罪行。然而,你這樣做,恕我直言*收起*和*回來*變化是沒有什麼大不了的。 –

1

首先,你在命令行工作,或使用像烏龜?

如果您正在使用命令行,並且已經完成了拉取操作,mercurial不會要求您執行任何操作,因爲它只會更新您的本地存儲庫。

如果您接着進行hg更新並進行本地更改,則應該按照您習慣於CVS的方式進行操作。它將更新到當前分支的頂端,並嘗試合併您未完成的更改。有一些注意事項,請參閱http://www.selenic.com/mercurial/hg.1.html#update的官方文檔。

此外,爲了暫時存儲更改,我會推薦MQ over shelve。 Shelve只提供一個存儲區域,而MQ提供儘可能多的存儲區域。 MQ需要一些習慣,但值得投資。

+0

我實際上使用eclipse插件從我的存儲庫中推入和拉出。我看到有一個名爲Mqueue的擴展名,它允許我進入Qimport,Qinit Qnew Qrefresh Qdelete,我不確定這些中的任何一個是做什麼的。 MQ = Mqueue? – Jason

+0

Mqueue應該是相同的,因爲所有這些命令名稱都是相同的。 –