2011-06-17 19 views
5

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

其他人爲了解決這個問題做了些什麼?我發現擱置擴展的文檔很難讓我的頭..

我正在使用Mercurial Eclipse來推送和拉文件到/從服務器。任何解釋,將不勝感激!謝謝!

例子:

我的工作我的水銀Eclipse的網站..我有一個新的文件夾,我不希望提交到服務器,只是還沒有新的文件。我也修改了一些現有的文件,我不想讓這些更改生效。然後,我的網站上的某些內容就會中斷,我需要修復它,它不會讓我修復它,而不用重新綁定或合併最近的回購提示,這會導致我失去所有未提交的更改。如果我不想丟失它,我應該怎樣處理我編輯的新文件夾和文件?重新克隆看起來很乏味。將這些文件複製到一個新文件夾似乎也很乏味。我相信Shelving或MQ會做我想做的事,但我不知道如何去做。

+0

請告訴我們您正在使用的貨架文件以及您遇到問題的部件。 –

+1

[Mercurial可用性]的可能重複(http://stackoverflow.com/questions/6390436/mercurial-usability)。 @Jason:如果你只是想重新回答你的問題,請使用'edit'按鈕,不要發佈新的問題。 – Gilles

+0

我找不到任何有關在Mercurial Eclipse中使用MQ擴展的文檔。我已經閱讀了這個文檔[鏈接](http://mercurial.selenic.com/wiki/MqTutorial)'MqTutorial'。我想我不明白如何使用補丁和工作流程。我會在我的問題中添加一個我想要做的例子。 – Jason

回答

2

我確定有人會幫你找到一個不好的解決方法,但最好的途徑是改變你的目標 - 只是提交。尚未提交的代碼尚未寫入。如果你肯定不能在你的歷史記錄中頻繁提交,請使用具有隊列存儲庫的Mercurial隊列並提交它。然後,您可以彈出更改集,推/拉/合併,然後將其重新推回,並且所有有價值的工作都將在修補程序隊列中提交。

+0

我似乎無法弄清楚Mercurial Eclipse中的隊列工作方式。任何額外的解釋,將不勝感激! – Jason

+1

現在,這部分是我不理解流行/推動等等。因此,對於其他人想知道的情況..你創建一個補丁(qnew),做任何你需要做但不想提交的改變,然後qrefresh來更新補丁,qpop取消補丁並做出你想要的任何修改馬上推。 qpush回到你的補丁。 – Jason

3

參照你的例子情況,這裏是我會做什麼(以下Ry4an的策略,只是承諾你目前正在使用的東西,但不希望已發佈):

應該開始工作在這樣的存儲庫中:

$ hg status -A 
C f1 
C f2 
$ hg glog 
@ changeset: 1:7f3c6c86a92f 
| tag:   tip 
| summary:  add f2 
| 
o changeset: 0:03ca1e6d5b86 
    summary:  initial 

這就是有2個文件和2個提交/變更集。你做了一些工作,比方說增加新的功能,然後你的工作副本可能是這樣的:

$ hg status 
M f2 
? f3 
? f4 

有2個新的和1修改後的文件。現在,您必須修復一個您還需要在遠程存儲庫中進行任何新更改的錯誤。通過提交快照您目前的工作和拉遠程變化(在命令你做不要緊,一拉在默認情況下不碰你的工作拷貝的狀態):

$ hg commit -A -m "snapshot feature work" 
$ hg pull 

這可能導致歷史是這樣的:

o changeset: 3:2284ba62de07   <-- just pulled in 
| tag:   tip 
| parent:  1:7f3c6c86a92f 
| summary:  edit f1 
| 
| @ changeset: 2:4a19d371a04f   <-- your interrupted work 
|/ summary:  snapshot feature work 
| 
o changeset: 1:7f3c6c86a92f 
| summary:  add f2 
| 
o changeset: 0:03ca1e6d5b86 
    summary:  initial 

現在你可以更新到/簽出修訂3,並開始修復bug:

$ hg update 3 
.. fix the bug .. 
$ hg commit -m "fix a bug" 
$ hg glog --limit 3 
@ changeset: 4:5d3d947fb4af 
| tag:   tip 
| summary:  fix a bug 
| 
o changeset: 3:2284ba62de07 
| parent:  1:7f3c6c86a92f 
| summary:  edit f1 
| 
| o changeset: 2:4a19d371a04f 
|/ summary:  snapshot feature work 
: 

看起來不錯,讓我們把你的修正,即使其生活,而不要發佈您的中間工作:

$ hg push -r 4 

這推動領先於修訂4,你的bug修正所有更改,但在你的本地倉庫沒有其他分支。您也可以使用-r .,它指的是您的工作副本的父修訂版,即您剛剛提交的修訂版。

最後,你可以回到你的特點的工作,並繼續您的工作:

$ hg update 2 
.. work, commit, work, commit .. 
.. finally merge with the other branch, e.g. revision 4 

這些步驟都是在命令行上,但我認爲這是不是要拼命的一般概念適應相應的點擊Eclipse Mercurial插件。

一些額外的注意事項:

  • 你可能想書籤快照提交,所以你不需要使用版本編號或數字工作。
  • 如果您想稍後在單次提交中發佈您的功能,請在完成後使用摺疊擴展名。
+0

只是一個說明:這被稱爲*微調*技術。請參閱http://hgtip.com/tips/advanced/2009-09-28-nudge-a-gentler-push/ –

相關問題