このページは CommunicatingChanges の翻訳です。

Mercurialには変更を取り交すための3つの異なる方法があり、それぞれ有用な場面が異なります:

push/pull/clone

これは開発者間でチェンジセットを交換するための通常の方法です。高速かつ容易で、ほとんどの環境において利用可能です。

$ hg clone hg work
requesting all changes
adding changesets
adding manifests
adding file changes
added 1218 changesets with 2690 changes to 195 files
$ cd work
$ hg pull ../local
pulling from /home/example/local
searching for changes
adding changesets
adding manifests
adding file changes
added 13 changesets with 20 changes to 6 files
(run 'hg update' to get a working copy)
$ hg up
$ <make changes>
$ hg ci
$ hg push ssh://user@server/~/repo/hg/
pushing to ssh://user@server/~/repo/hg/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 3 changes to 3 files

まったく関係のないリポジトリからpullすることもできます。例として自分のMercurialのリポジトリにlinux kernelからpullしましょう。

[vmg@xarn mercurial]$ hg pull http://www.kernel.org/hg/linux-2.6
pulling from http://www.kernel.org/hg/linux-2.6
searching for changes
warning: pulling from an unrelated repository!
...

linuxのリポジトリからのpullはうまくいきますが、そのリポジトリから上流のMercurialのリポジトリにpushすると、上流のリポジトリもLinuxのコピーが含まれてしまいます(それはあなたの意図とは異なるかもしれません)。とはいえ、この機能はいくつかの小さなプロジェクトを束ねて単一の大きなプロジェクトにするのには有用かもしれませんし、「ベンダーブランチ」を管理するのに役立つかもしれません(そのベンダーもMercurialを使っていればの話ですが)。http://www.gelato.unsw.edu.au/archives/git/0506/5511.htmlも見てください。

ServerInstallPublishingRepositories も参考にしてください。

import/export

この方法は複数の開発者から小さな差分を受けとるようなやりかたには有効です。つまり伝統的なオープンソースのやりかたです。これは中央のリポジトリにパッチを適用する前に精査しておきたい場合に主に使われます。

push/pullと組合せて、元のリポジトリからpullをしつつexportで作ったパッチをメーリングリストに投稿することがよくなされます。

$ hg export 1135
# HG changeset patch
# User Thomas Arendsen Hein <thomas@intevation.de>
# Node ID e455d91f62598b8f255ce6c0291afe8f8565e0d2
# Parent  2cd33ea2f66bae0eb7415cfcd7eab88566fdb1aa
Variable 'body' was missing in patchbomb script.

diff -r 2cd33ea2f66b -r e455d91f6259 contrib/patchbomb
--- a/contrib/patchbomb Sun Aug 28 16:30:40 2005
+++ b/contrib/patchbomb Sun Aug 28 16:52:55 2005
@@ -107,6 +107,7 @@
     def makepatch(patch, idx, total):
         desc = []
         node = None
+        body = ''
         for line in patch:
             if line.startswith('#'):
                 if line.startswith('# Node ID'): node = line.split()[-1]
$ hg export 1135 > ../body.patch
$ cd ../work
$ hg import ../body.patch

bundle/unbundle

この方式は「bundle」を受け渡しすることで差分を取り交します。「bundle」というのはMercurialの内部フォーマットでのチェンジセットを圧縮したものです。bundleは電子メールに添付ファイル、FTP、フロッピーディスクなどを経由してやりとりできます。

これを使うと変更履歴すべてを公開せずに自分の変更点を公開することもできます。

$ hg bundle changes.hg http://upstream/repo
searching for changes
$ scp changes.hg server:public_html
$ cd ../other
$ hg unbundle http://server/~user/changes.hg
adding changesets
adding manifests
adding file changes
added 13 changesets with 20 changes to 6 files


CategoryJapanese

JapaneseCommunicatingChanges (last edited 2009-05-19 19:31:01 by localhost)