Difference between revisions of "Creating A Patch/ja"
(One intermediate revision by the same user not shown) | |||
Line 12: | Line 12: | ||
==必要なもの== | ==必要なもの== | ||
− | + | Lazarus の trunk/開発版。SVN か Git いずれかを使って入手できます。 | |
− | * | + | * SVN:[[Getting Lazarus/ja#Lazarus SVN 開発版の取得|Lazarus SVN 開発版]] - これが大元のリポジトリです。 |
− | * | + | * Git:[[git mirrors|Git ミラー]]、[[Lazarus git-svn|Lazarus Git-svn]] - GitHub に Lazarus のミラーがあります。Git は git-svn 連携を使って直接 SVN サーバを利用することもできます。 |
==プラットフォームで異なるところ== | ==プラットフォームで異なるところ== | ||
Line 36: | Line 36: | ||
# <syntaxhighlight lang="bash">cd ~/lazarus</syntaxhighlight> | # <syntaxhighlight lang="bash">cd ~/lazarus</syntaxhighlight> | ||
− | ==SVN | + | ==SVN を使ってパッチを作成する== |
<syntaxhighlight lang="bash">svn diff > mypatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">svn diff > mypatch.diff</syntaxhighlight> | ||
こうして作られたパッチには、SVN リポジトリのすべての変更が含まれます。 | こうして作られたパッチには、SVN リポジトリのすべての変更が含まれます。 | ||
Line 43: | Line 43: | ||
<syntaxhighlight lang="bash">svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff</syntaxhighlight> | ||
− | ==Git | + | ==Git を使ってパッチを作成する== |
− | + | 開発はローカルブランチで行います。開発しているブランチ内で動作が確認できたら、以下のコマンドでローカルコミットのパッチをすべて作成します。 | |
− | |||
<syntaxhighlight lang="bash">git format-patch master</syntaxhighlight> | <syntaxhighlight lang="bash">git format-patch master</syntaxhighlight> | ||
− | "0001-CommitMsg.patch"、"0002-CommitMsg.patch" | + | "0001-CommitMsg.patch"、"0002-CommitMsg.patch" といった名前のファイルの組が作られます。 |
1 つのパッチにすべての変更をまとめたいのであれば、"git rebase -i ..." を使ってコミットをまとめるか、以下のコマンドを使います。 | 1 つのパッチにすべての変更をまとめたいのであれば、"git rebase -i ..." を使ってコミットをまとめるか、以下のコマンドを使います。 | ||
<syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight> | <syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight> | ||
− | {{Note| git-svn 連携を使用している場合、デフォルトでは "master" ブランチが SVN の trunk を追従するようになっています。ですが、GitHub のミラーリポジトリではそうではなく "upstream" | + | {{Note| git-svn 連携を使用している場合、デフォルトでは "master" ブランチが SVN の trunk を追従するようになっています。ですが、GitHub のミラーリポジトリではそうではなく "upstream" ブランチが使われています。その場合は、上述のコマンドは "master" を "upstream" に置き換えてください。}} |
==パッチの提出== | ==パッチの提出== | ||
Line 59: | Line 58: | ||
[http://bugs.freepascal.org bug tracker] を通してパッチを提出するのがお勧めの方法です。詳しくは、[[How do I create a bug report/ja|不具合報告のやり方]]をご覧になってください。bug tracker に報告されている課題を修正するパッチであればその課題項目へ、そうでない場合は bug tracker 上に新しく課題項目を作成しそこへパッチを提出します。課題項目に対してアップロードできたら提出完了です。 | [http://bugs.freepascal.org bug tracker] を通してパッチを提出するのがお勧めの方法です。詳しくは、[[How do I create a bug report/ja|不具合報告のやり方]]をご覧になってください。bug tracker に報告されている課題を修正するパッチであればその課題項目へ、そうでない場合は bug tracker 上に新しく課題項目を作成しそこへパッチを提出します。課題項目に対してアップロードできたら提出完了です。 | ||
− | == | + | ==フォークされている Git リポジトリの直接使用== |
− | + | Lazarus の開発においても Git を使って配布するというやり方もありでしょう。最近では JuhaManninen 氏と Alexander Klenin ("Ask") 氏が Git リポジトリへのコードの受け入れを進んで行っています。 | |
− | |||
− | + | 実際、彼らのリポジトリは GitHub 内において Lazarus のミラーからフォークされています。当然ながら受け入れられたコードは、独立したブランチ内の存在であり、"upstream" ブランチより rebase された状態にあります。これらのコードはまだテストされてはおらず、誰かによってこれらのリポジトリをフォークされたりそこからコードを作成されたりすると、やるべきテストなどがどっと増やされてしまうかもしれません。 | |
− | |||
− | |||
− | + | このような限られた場というのは、Git を使って専門の開発をする人達のためのものでしょう。そこでのコードを多くの人に利用してもらいたいのであれば、Git を使って適宜パッチを作り、bug tracker へ提出するべきでしょう。 | |
− | |||
==パッチの適用== | ==パッチの適用== | ||
ここでは、他のだれかが作ったパッチをお使いになられているローカルリポジトリに適用する方法について説明します。以下のように --dry-run スイッチを使うことでパッチの影響テストが行えます。 | ここでは、他のだれかが作ったパッチをお使いになられているローカルリポジトリに適用する方法について説明します。以下のように --dry-run スイッチを使うことでパッチの影響テストが行えます。 | ||
<syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight> | ||
− | + | このパッチテストの出力結果は実際に行われるパッチと同じものですが、ソースファイルを変更することはありません。かなり厳格なテストなので、お使いになられている環境のソースファイルが思いがけず乱されるということはまずないでしょう。 | |
==="svn diff" で作られたパッチ=== | ==="svn diff" で作られたパッチ=== | ||
テストで問題なかったら、以下のコマンドを使ってパッチを適用します。 | テストで問題なかったら、以下のコマンドを使ってパッチを適用します。 | ||
<syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight> | ||
− | + | これでうまくいかないのは、お使いになられている環境がパッチが作られた環境と異なっているからです。その場合は、以下のようにしてパス情報をすべて引き出すように指定してください。 | |
<syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight> | ||
Line 96: | Line 91: | ||
====TortoiseMerge==== | ====TortoiseMerge==== | ||
− | TortoiseMerge は Git 書式のパッチも問題なく使用できます。Tortoise SVN をインストールすると TortoiseMerge | + | TortoiseMerge は Git 書式のパッチも問題なく使用できます。Tortoise SVN をインストールすると TortoiseMerge もインストールされますが、エクスプローラの右クリックメニューには表示されません。スタートメニューから起動してください。(訳注:ずばりの名称は右クリックメニューには出ませんが、パッチを適用 とかで開かれるものが TortoiseMerge です。) |
ToDo:Git 書式のパッチをサポートする GUI ツールが他にもあるようでしたらここに追加してください | ToDo:Git 書式のパッチをサポートする GUI ツールが他にもあるようでしたらここに追加してください | ||
===トラブルシューティング=== | ===トラブルシューティング=== | ||
− | パッチを適用する段階になって Unix/Linux の改行コード (LF) と Windows の改行コード (CR+LF) が異なってうまくいかないことがあります。Windows 環境では patch.exe | + | パッチを適用する段階になって Unix/Linux の改行コード (LF) と Windows の改行コード (CR+LF) が異なってうまくいかないことがあります。Windows 環境では patch.exe の改行コード処理がいい加減なので、パッチ適用前にファイルを変換する必要があるでしょう。 |
Windows 版の FPC/Lazarus に付属している patch.exe はかなり使いづらいです。Git に付属している patch.exe の方がいいでしょう。 | Windows 版の FPC/Lazarus に付属している patch.exe はかなり使いづらいです。Git に付属している patch.exe の方がいいでしょう。 | ||
Line 108: | Line 103: | ||
==関連項目== | ==関連項目== | ||
− | * [[How do I create a bug report/ja|不具合報告のやり方]] 不具合報告の一般的な情報 | + | * [[How do I create a bug report/ja|不具合報告のやり方]] - 不具合報告の一般的な情報 |
− | * [[Tips on writing bug reports]] | + | * [[Tips on writing bug reports|不具合報告を書く上でのヒント]] - 不具合を報告するさいのトラブルやそうならないための対策 |
− | * [[Database bug reporting]] | + | * [[Database bug reporting|データベース関連の不具合報告]] - データベース関連の不具合報告用の簡単なプログラムと関連する情報 |
[[Category:Debugging/ja]] | [[Category:Debugging/ja]] | ||
[[Category:Lazarus/ja]] | [[Category:Lazarus/ja]] | ||
[[Category:FPC/ja]] | [[Category:FPC/ja]] |
Revision as of 14:48, 26 December 2013
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
português (pt) │
русский (ru) │
slovenčina (sk) │
FPC や Lazarus を改良したコードを提出する場合は、開発者がマージしやすいようにパッチで提出するようにしてください。
例外事項:
- 翻訳用の .po ファイルはパッチではなくファイルをそのまま提出してください
- 新規に作られたファイルは、ファイルをそのまま提出して、設置場所を明記してください
必要なもの
Lazarus の trunk/開発版。SVN か Git いずれかを使って入手できます。
- SVN:Lazarus SVN 開発版 - これが大元のリポジトリです。
- Git:Git ミラー、Lazarus Git-svn - GitHub に Lazarus のミラーがあります。Git は git-svn 連携を使って直接 SVN サーバを利用することもできます。
プラットフォームで異なるところ
コマンドプロンプトを開いてリポジトリのあるディレクトリに移動 (cd) する部分が若干異なります。詳しくは以下に示します。
Windows
チェックアウトした Lazarus が C:\lazarus にある場合:
- コマンドプロンプトを開きます(例:「ファイル名を指定して実行」で cmd.exe と入力)
c:
cd \lazarus
問題がある場合は、TortoiseSvn#Troubleshooting もご覧になってください。
Unix 系
チェックアウトした Lazarus が ~/lazarus にある場合:
- 端末を開きます
cd ~/lazarus
SVN を使ってパッチを作成する
svn diff > mypatch.diff
こうして作られたパッチには、SVN リポジトリのすべての変更が含まれます。
個別にパッチを作りたい場合は、関係のないものが含まれないように以下のように行います。
svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff
Git を使ってパッチを作成する
開発はローカルブランチで行います。開発しているブランチ内で動作が確認できたら、以下のコマンドでローカルコミットのパッチをすべて作成します。
git format-patch master
"0001-CommitMsg.patch"、"0002-CommitMsg.patch" といった名前のファイルの組が作られます。
1 つのパッチにすべての変更をまとめたいのであれば、"git rebase -i ..." を使ってコミットをまとめるか、以下のコマンドを使います。
git format-patch master --stdout > mypatch.patch
パッチの提出
パッチを提出する前に、それで問題ないか入念な確認をお願いいたします。
bug tracker を通してパッチを提出するのがお勧めの方法です。詳しくは、不具合報告のやり方をご覧になってください。bug tracker に報告されている課題を修正するパッチであればその課題項目へ、そうでない場合は bug tracker 上に新しく課題項目を作成しそこへパッチを提出します。課題項目に対してアップロードできたら提出完了です。
フォークされている Git リポジトリの直接使用
Lazarus の開発においても Git を使って配布するというやり方もありでしょう。最近では JuhaManninen 氏と Alexander Klenin ("Ask") 氏が Git リポジトリへのコードの受け入れを進んで行っています。
実際、彼らのリポジトリは GitHub 内において Lazarus のミラーからフォークされています。当然ながら受け入れられたコードは、独立したブランチ内の存在であり、"upstream" ブランチより rebase された状態にあります。これらのコードはまだテストされてはおらず、誰かによってこれらのリポジトリをフォークされたりそこからコードを作成されたりすると、やるべきテストなどがどっと増やされてしまうかもしれません。
このような限られた場というのは、Git を使って専門の開発をする人達のためのものでしょう。そこでのコードを多くの人に利用してもらいたいのであれば、Git を使って適宜パッチを作り、bug tracker へ提出するべきでしょう。
パッチの適用
ここでは、他のだれかが作ったパッチをお使いになられているローカルリポジトリに適用する方法について説明します。以下のように --dry-run スイッチを使うことでパッチの影響テストが行えます。
patch --dry-run < somepatch.diff
このパッチテストの出力結果は実際に行われるパッチと同じものですが、ソースファイルを変更することはありません。かなり厳格なテストなので、お使いになられている環境のソースファイルが思いがけず乱されるということはまずないでしょう。
"svn diff" で作られたパッチ
テストで問題なかったら、以下のコマンドを使ってパッチを適用します。
patch < somepatch.diff
これでうまくいかないのは、お使いになられている環境がパッチが作られた環境と異なっているからです。その場合は、以下のようにしてパス情報をすべて引き出すように指定してください。
patch -p0 < somepatch.diff
Windows 用の GUI バージョン管理ツールでもこれらのパッチは適用できます。
"git format-patch" で作られたパッチ
Git
Git にパッチを適用するには以下のようにします。
git apply 0001-gitpatch.patch
patch コマンド
patch コマンドは -p1 スイッチで git 書式にも対応しています。Linux 版の patch v.2.6.1 で動作確認しました。古いバージョンはおそらく対応していないでしょう。
patch -p1 < 0001-gitpatch.patch
patch コマンドは Windows でも利用できます。また、GUI ツールにも同じ機能があります。
TortoiseMerge
TortoiseMerge は Git 書式のパッチも問題なく使用できます。Tortoise SVN をインストールすると TortoiseMerge もインストールされますが、エクスプローラの右クリックメニューには表示されません。スタートメニューから起動してください。(訳注:ずばりの名称は右クリックメニューには出ませんが、パッチを適用 とかで開かれるものが TortoiseMerge です。)
ToDo:Git 書式のパッチをサポートする GUI ツールが他にもあるようでしたらここに追加してください
トラブルシューティング
パッチを適用する段階になって Unix/Linux の改行コード (LF) と Windows の改行コード (CR+LF) が異なってうまくいかないことがあります。Windows 環境では patch.exe の改行コード処理がいい加減なので、パッチ適用前にファイルを変換する必要があるでしょう。
Windows 版の FPC/Lazarus に付属している patch.exe はかなり使いづらいです。Git に付属している patch.exe の方がいいでしょう。
"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff
SVN 1.7 以降でしたら SVN の patch コマンドも利用できます。
関連項目
- 不具合報告のやり方 - 不具合報告の一般的な情報
- 不具合報告を書く上でのヒント - 不具合を報告するさいのトラブルやそうならないための対策
- データベース関連の不具合報告 - データベース関連の不具合報告用の簡単なプログラムと関連する情報