1

たとえば、修正するバグが2つあります。bug1とbug2です。

私はbug1から始めて、それを修正している最中に、bug2に行き、半分修正します。

私はbug1に戻り、再び部分的に修正して、再びbug2に進みます。

このように、多くの切り替えを行った後、両方のバグの修正を完了しました。

これらの両方のバグを確認する人は異なり、関係のないバグとは何の関係もありません。だから、私は彼らに異なるパッチを提供する必要があります。

私がプレーンを使用していた場合hg diff、私はやったでしょう:

hg diff -U 7 -p file1 -r OLD_REVISION_NUMBER > patch1bug1の場合、および

hg diff -U 7 -p file2 -r OLD_REVISION_NUMBER > patch2bug2の場合

Mercurial Queuesで同じことを行うにはどうすればよいですか?基本的なワークフローを提案してください。

4

1 に答える 1

1

これは、2つの重複しないパッチ、つまり2つのパッチが同じファイルを変更しないことを前提とした非常に単純化されたワークフローです。

$ hg init myrepo
$ cd myrepo
$ echo "This is file1" >file1
$ echo "This is file2" >file2
$ hg add
adding file1
adding file2
$ hg commit -m 'initial files'

#  Initialize and work on patch1

$ hg qnew -m 'Fix for bug1' patch1
$ echo "a second line" >>file1
$ hg diff
diff --git a/file1 b/file1
--- a/file1
+++ b/file1
@@ -1,1 +1,1 @@
-This is file1
+a second line
$ hg qdiff
diff --git a/file1 b/file1
--- a/file1
+++ b/file1
@@ -1,1 +1,1 @@
-This is file1
+a second line

#  Update the current patch (patch1)

$ hg qrefresh
$ hg diff
$ hg qdiff
diff --git a/file1 b/file1
--- a/file1
+++ b/file1
@@ -1,1 +1,1 @@
-This is file1
+a second line

#   Initialize and work on patch2

$ hg qnew -m 'Fix for bug2' patch2
$ hg qseries
patch1
patch2
$ hg qtop
patch2
$ hg diff
$ echo 'another line for file2' >>file2
$ hg diff
diff --git a/file2 b/file2
--- a/file2
+++ b/file2
@@ -1,1 +1,2 @@
 This is file2
+another line for file2
$ hg qrefresh
$ hg diff
$ hg qdiff
diff --git a/file2 b/file2
--- a/file2
+++ b/file2
@@ -1,1 +1,2 @@
 This is file2
+another line for file2

#  Export patch2

$ hg export qtip
# HG changeset patch
# User My Name <myemail>
# Date 1362771912 28800
# Node ID 2baa2bf81b000d4d720f9c4151242458b90bcd80
# Parent  ccd75363c8f459bec4a8d6b94dfb4150fb9e3014
Fix for bug2

diff --git a/file2 b/file2
--- a/file2
+++ b/file2
@@ -1,1 +1,2 @@
 This is file2
+another line for file2

#  Pop back to and export patch1

$ hg qpop
popping patch2
now at: patch1
$ hg export qtip
# HG changeset patch
# User My Name <myemail>
# Date 1362771745 28800
# Node ID ccd75363c8f459bec4a8d6b94dfb4150fb9e3014
# Parent  a227e9c42f2d17fb28082ad2451a03d4926505ba
Fix for bug1

diff --git a/file1 b/file1
--- a/file1
+++ b/file1
@@ -1,1 +1,1 @@
-This is file1
+a second line

#  Resume working on patch2

$ hg qpush
applying patch2
now at: patch2
...

#  Apply patch1 to repo

$ hg qpop
popping patch2
now at: patch1
$ hg qfinish -a
$ hg qseries
patch2
$ hg summary
parent: 1:ccd75363c8f4 tip
 Fix for bug1
branch: default
commit: (clean)
update: (current)
mq:     1 unapplied
$ hg qpush
applying patch2
now at: patch2

Mercurial Queuesは、一連のパッチの後のパッチが前のパッチによって行われた変更を変更する可能性があるパッチの順序付きリストを管理するように設計されていることに注意してください。作業中のプロジェクトに同じファイルセットの並列開発が含まれる場合、MQは使用するのに最適なツールではない可能性があります。その場合は、ブックマークの有無にかかわらず、MercurialブランチまたはMercurial匿名ヘッドの使用を検討してください。

于 2013-03-08T20:18:42.780 に答える