2010-12-11 10 views
1

私は2つのローカル水銀レポを持っています。それらを製品とスカンクワークスと呼ぼう。 Skunkworksは製品のクローンであり、最近のコミットアクティビティはたくさんあります。私は、ディレクトリツリーの小さな部分から差分をパッケージ化し、それらをパッチファイルとして取り出すことができる必要があります。水銀で1つのディレクトリを比較する方法

私は、ディスク上の次のレイアウトを持っている:

c:/dev/product 
c:/dev/skunkworks 

私はパッケージ化したい差分の面積をcからです:は/ dev /スカンクワークス/ buildstuff。このディレクトリは製品リポジトリに存在します。私はまだ他の人たちをスケッチの残りの部分の変化にさらしたくないが、私の新しいビルドの良さを分かち合うことができる必要がある。

私はさまざまなパラメータ設定と 'hg diff'コマンドの組み合わせを試しましたが、明らかに何か間違っています。どのような指針や提案をいただければ幸いです。

ありがとうございます!

答えて

2

これはかなり簡単に行うことができますが、次回は作業の独立した作業(ビルド作業と残りのスケンクワークス)を行うときに別々のヘッドで行うことをお勧めします。 hg push w/o skunkworksを使って製品に直接構築することもできます。あなたのスカンクワークスのクローンが2頭、ビルド作業と1とスカンクワークスのものを持っているだろう、その時点で

hg clone product skunkworks 
cd skunkworks 
... build hacking ... 
hg commit 
... build hacking ... 
hg commit 
hg update REVNUMBER # where revnumber is the last revision that exists in product 
... skunkworks hacking ... 
hg commit # at this point you'll see (+1 heads) 
... more skunkworks hacking ... 
hg commit 

:そのパターンは次のようになります。作業中に前後に切り替えることができます。ビルドと日没を交互に切り替えながら、同じクローン内で別々にすることができます。スカンクワークスでの作業中に、あなたが行うことができますあまりにもビルド細かい点にしたい場合:

hg update SKUNKWORKSHEAD 
hg merge BUILDHEAD 

スカンクワークスにbuildworkをマージしますが、buildworkのものは、まだ親として任意のスカンクワークスを持っていないので、いつでもあなたができること:

cd ../product 
hg pull -r BUILDHEAD ../skunkworks 

あなたは他のスケッチワークの変更なしでビルド用のものだけを製品に移動できます。 は、skunkworksを製品に移動する準備ができているので、ビルドの変更がどこから来たのか、そしてそれらを正しく統合する方法を正確に知ることができるので、このようなことを行う最適な方法です(技術的には匿名ブランチと呼ばれます)。スカンクワークス。

やれやれは、あなたが今、何をしたいか言ったことすべては、おそらくです:

cd skunkworks 
hg diff -I buildstuff/** -r LAST_REV_IN_PRODUCT -r tip > ../applyme.patch 
cd ../product 
hg import --no-commit ../applyme.patch 
hg commit 

欠点あなたが製品に戻ってスカンクワークスをマージしないとき、すべてのビルドの変更はすでに行いなる、があるだろうということがありますそうでなければそうであるかもしれないより少ない自動マージ。

+0

ワウ、説明する時間を取ってくれてありがとう匿名のブランチアプローチ私はSVNから来ているので、私はまだクローンの周りを包み込み、水銀でさまざまな「分岐」オプションを囲んでいます。ありがとう! –

0

スカンクワークスで実行したいのはhg diff buildstuff -r <rev>だと思います。<rev>は製品レポに合致する最後のリビジョンです。

以下

は、元のリポジトリを表すファイルやディレクトリの数を作成します。

C:\>hg init test 
C:\>cd test 
C:\test>echo >file1 
C:\test>echo >file2 
C:\test>md dir1 
C:\test>md dir2 
C:\test>echo >dir1\file3 
C:\test>echo >dir1\file4 
C:\test>echo >dir2\file5 
C:\test>echo >dir2\file6 
C:\test>hg ci -Am 1 
adding dir1/file3 
adding dir1/file4 
adding dir2/file5 
adding dir2/file6 
adding file1 
adding file2 

私たちは、各サブディレクトリ内のファイルを複製し、変更します:

C:\test>cd .. 
C:\>hg clone test skunk 
updating to branch default 
6 files updated, 0 files merged, 0 files removed, 0 files unresolved 

C:\>cd skunk 
C:\skunk>echo >>dir1\file4 
C:\skunk>echo >>dir2\file5 
C:\skunk>hg st 
M dir1\file4 
M dir2\file5 

C:\skunk>hg ci -m skunk 

は今だけの差分を表示します以前のチェックインと比較してdir2の場合:

C:\skunk>hg diff dir2 -r 0 
diff --git a/dir2/file5 b/dir2/file5 
--- a/dir2/file5 
+++ b/dir2/file5 
@@ -1,1 +1,2 @@ 
ECHO is on. 
+ECHO is on. 
関連する問題