2010-06-10 55 views
12

考慮轉用Mercurial的Subversion商店,試圖事先弄清楚開發者的所有抱怨是什麼。在這裏有一個相當常見的用例,我看不到如何處理。在沒有部分承諾的情況下提交「Mercurial方式」

  1. 我工作的一些相當大的特點,讓我有代碼的顯著部分 - 或者可能是代碼的幾個顯著的部分 - 在碎片遍佈車庫地板,完全不適合籤,也許甚至沒有編譯。
  2. 一個緊急的錯誤修復請求進來。修復很好,本地,並且不會觸及我一直在處理的任何代碼。
  3. 我在我的工作副本中進行修復。

現在是什麼?

我看過「Mercurial cherry picking changes for commit」和「best practices in mercurial: branch vs. clone, and partial merges?」,所有的建議似乎都是從Record和Shelve到Queues的不同複雜性的擴展。

事實上,顯然沒有任何核心功能,這讓我懷疑在某種意義上這種工作風格是做錯了。這種用例的Mercurial解決方案會是什麼樣子?


編輯補充: git的,相比之下,似乎專爲這個工作流程:git add修正錯誤的文件,不要git add別的(或git reset HEAD任何你可能已經增加),git commit

+0

短期本地分支和隊列都是「核心功能」。在這種情況下,缺乏「認可」選項應該被解釋爲對多種工作方式的驗證,而不是任何解僱。 – 2010-06-13 07:07:13

+0

你還應該看看[提交和推送單個文件的最簡單方法是什麼](http://stackoverflow.com/questions/125272/using-mercurial-whats-the-easiest-way-to-commit-and- push-a-one-file-while-le) – Casebash 2010-09-07 02:46:46

回答

6

許多Mercurial的有用功能都以擴展的形式提供 - 不要害怕使用它們。

至於你的問題,record提供了你所說的部分提交(它允許你選擇你想提交哪些更改的變化)。另一方面,shelve允許臨時使您的工作副本保持乾淨,同時保持本地更改。一旦您提交了錯誤修復,您可以取消保存更改並繼續工作。

解決此問題(即僅使用核心)的規範方法可能是製作一個克隆(請注意,由於創建硬鏈接而不是副本,本地克隆便宜)。

+1

不怕使用擴展名,但不敢使用擴展名來避免改變我的想法。我想我需要找到一種方法,使本地克隆對IDE來說便宜,就像文件系統一樣... – 2010-06-11 09:26:00

+1

'hg record'〜='git commit -i'和'hg shelve'〜='git stash' – 2011-12-04 19:36:15

3

您將克隆存儲庫(即以SVN術語創建一個錯誤修復分支)並從那裏進行修復。

或者,如果它確實是一個快速修復,您可以在提交時使用-I選項來顯式簽入單個文件。

+0

關於-I的好處。實際上,現在我正在查看hg手冊頁,而不是僅僅從抓取教程的人那裏投訴,我不確定提交行爲與svn不同。 – 2010-06-11 09:32:51

+1

'-I'選項甚至不需要,您可以執行'hg commit foo.c bar.h'。如果您想要使用包含/排除過濾器,我會將'-I'和'-X'選項看作您使用的某個選項。我個人從不使用它們,因爲我的外殼可以爲我做所需的通配符。 – 2010-06-15 09:38:38

3

像任何DVCS一樣,分支是你的朋友。分支存儲庫多種方式是這些系統的麪包和黃油。以下是git model,你可能會考慮採用與Mercurial相當好的方法。

+0

是的,我有一種感覺,那就是答案。可能不得不等待IDE才能趕上分支機構之間快速切換的想法。 – 2010-06-11 09:29:08

8

這是我將如何處理的情況:

  1. 有Dev分支
  2. 有功能分支
  3. 有個人分支
  4. 有一個穩定的分支。

在你的場景中,我會經常提交我的分支關閉功能分支。

當請求進來時,我會hg up -r XYZ其中XYZ是他們正在運行的轉數,然後分支一個新的功能分支(或up branchname,無論)。

執行工作,然後在測試工作後合併到穩定分支中。

切換回我的工作,並從頂級功能分支提交節點合併,從而整合兩個工作流。

+0

這是有道理的。 – 2010-06-11 09:30:01

1

除了what Santa said關於分支是你的朋友?

小粒度的提交是你的朋友。與其在單個提交中進行大量代碼更改,不如在自己的提交中更改每個邏輯上獨立的代碼。然後,挑選分支之間合併的更改將變得更容易。

1

請勿在不使用Mercurial的情況下使用Mq Extension(它將在預安裝​​中預打包)。除了解決您的特定問題之外,它還解決了許多其他常見問題,並且確實應該是您工作的默認方式(尤其是如果您使用的IDE不直接與Hg集成,因此可以即時切換分支一個艱難的工作方式)。

相關問題