パッチの作成及び適用

(TortoiseSVN のような)オープンソースプロジェクトでは、リポジトリは誰もが読み込みアクセスできるようになっていて、誰もがプロジェクトに貢献できるようになっています。では、どのように貢献をコントロールするのでしょう? 誰もが変更をコミットできるようにすると、プロジェクトは永久に不安定になり、ややもすると永久に壊れた状態になるかもしれません。こういった状況では、変更を開発チーム(書き込む権限がある)への パッチ ファイルの送信といった形で管理しています。開発チームはまずパッチをレビューし、リポジトリに送信したり、拒否して作者に返却したりします。

パッチファイルは単なるUnified差分ファイルで、作業コピーと元になったリビジョンとの差分を表しています。

パッチファイルの作成

まず、変更したものの make とテスト をする必要があります。それから、親フォルダーで TortoiseSVNコミット... する代わりに、TortoiseSVNパッチを作成... を選択してください、

図4.60 パッチ作成ダイアログ

パッチ作成ダイアログ

ここで完全なコミットをするときのように、パッチに含めるファイルを選択できます。これで選択したファイルに対する、リポジトリを最後に更新したときからの変更点をまとめたファイルを得ることができます。

ダイアログの中の列は、 変更をチェック ダイアログの中の列と同じ方法でカスタマイズできます。詳細は 「ローカルとリモートの状態」 をご覧ください。

オプションボタンはをクリックすると、パッチの作り方を指定できます。たとえば、出力するパッチファイルで行末文字や空白文字の変更を含めないようにすることができます。

違うファイルの変更点を含めた分割したパッチも生成できます。もちろん、パッチファイルを生成してから、同じ ファイルに変更を加えて別のパッチを作成すると、2つ目のパッチには 両方 の変更点が含まれることになります。

それでは、任意のファイル名でファイルを保存してください。パッチファイルは任意の拡張子でかまいませんが、.patch.diff を拡張子に使用するのが通例となっています。これでパッチファイルを送信する準備ができました。

ヒント

パッチファイルを他の人にメールで送る場合は、.txtの拡張子で保存しないでください。生のテキストファイルは、メールソフトが空白や改行文字を自動的に変換したり切り詰めたりしてしまうことがあります。そうなると、パッチを円滑に適用できません。そのため、パッチファイルを保存するときは.patchまたは.diffの拡張子を使用してください。

また、ファイルに保存せずクリップボードに保存することもできます。電子メールに貼り付けて誰かにレビューしてもらう際に、そうしたくなると思います。また、1つのマシンに2つ作業コピーがあり、片方からもう片方へ変更を持っていくときに、クリップボードにパッチがあるとべんりです。

必要であれば、コミット変更をチェックダイアログでパッチファイルを作成することができます。ファイルを選択して、コンテキストメニューからパッチを作成するメニュー項目を選択してください。オプションダイアログを表示する場合は、 Shift を押しながら右クリックしてください。

パッチファイルの適用

作業コピーにパッチファイルを適用します。パッチを作成したフォルダーと同じ階層で行う必要があります。よくわからなければ、パッチファイルの最初の行を見てください。たとえば、最初のファイルが doc/source/english/chapter1.xml に対するもので、パッチファイルの最初の行が Index: english/chapter1.xml なら、doc/source/ フォルダーでパッチを適用する必要があります。適切な作業コピーを使用していても、適用するフォルダー階層が間違っていると、TortoiseSVN は適切な階層を使用するよう注意を促します。

パッチファイルを作業コピーに適用するために、少なくともリポジトリの読み込み権限が必要です。これは、他の開発者がリビジョンを変更していないかどうか、マージプログラムが参照するからです。

フォルダーのコンテキストメニューから、TortoiseSVNパッチを適用... をクリックしてください。するとファイルを開く ダイアログボックスが現れ、適用するパッチファイルを選択できます。デフォルトでは .patch ファイルか .diff ファイルのみが表示されていますが、すべてのファイルを選択できます。あらかじめパッチをクリップボードに保存していれば、ファイルを開く ダイアログの クリップボードから開く... を使用できます。

その他には、パッチファイルが .patch.diff といった拡張子を持つ場合、直接そのファイルを右クリックして、TortoiseSVNパッチを適用... を選んでください。この場合、作業コピーの場所を入力することになります。

この2つは同じことを違う方法で行っているだけです。1つ目は作業コピーを選択してからパッチファイルを閲覧し、2つ目はパッチファイルを選択してから作業コピーを閲覧します。

一度パッチファイルや作業コピーの場所を選択すると、パッチファイルの変更を作業コピーにマージするように TortoiseMerge が起動します。小さなウィンドウに変更のあったファイルを表示するので、その中の項目をダブルクリックして変更の確認や、マージしたファイルの保存を行ってください。

他の開発者のパッチが適用されたので、今度は誰もがリポジトリから変更点にアクセスできるよう、コミットする必要があります。