パッチファイルとバージョン管理のためのUnified Diff形式
Git、パッチファイル、バージョン管理システムで使用されるUnified Diff形式を解説。hunk構文、コンテキスト行、.diffおよび.patchファイルで使用される--- / +++ヘッダー表記を学びます。
Basic Diff
詳細な説明
Unified Diff形式
Unified Diff形式は、git diff、diff -u、パッチファイルの標準出力形式です。追加(+)、削除(-)、変更のないコンテキスト行(スペース)の行プレフィックスで両バージョンを単一のストリームに統合します。
Unified Diffの構造
--- a/config.json
+++ b/config.json
@@ -5,7 +5,8 @@
"debug": false,
"port": 3000,
- "host": "localhost",
+ "host": "0.0.0.0",
+ "cors": true,
"timeout": 30
}
ヘッダー行
--- a/file— 元のファイルパス+++ b/file— 変更後のファイルパス@@ -5,7 +5,8 @@— hunkヘッダー:元のファイルは5行目から7行、変更後は5行目から8行を示す
行プレフィックス
hunk内の各行には正確に1文字のプレフィックスが付きます:
| プレフィックス | 意味 |
|---|---|
(スペース) |
コンテキスト — 参照用の変更のない行 |
- |
削除 — 元から削除された行 |
+ |
追加 — 変更後に追加された行 |
コンテキスト行
デフォルトでgit diffは各変更の周囲に3行のコンテキストを表示します。コンテキスト行により、ファイル内のどこで変更が発生したかを読者が理解できます。git diff -U<n>でコンテキスト行数を調整できます。
複数のhunk
1つのファイルのDiffに、ファイルの異なる部分で変更が発生した場合、複数のhunkを含めることができます。各hunkには独自の@@ヘッダーがあります。
hunkヘッダーの読み方
hunkヘッダー@@ -10,4 +10,6 @@の意味:
- 元のファイル: 10行目から4行
- 変更後: 10行目から6行(2行追加)
ユースケース
Unified Diff形式はGitワークフローに不可欠です。開発者はgit diffの実行、メールでのパッチレビュー、git applyでの変更適用、CI/CDパイプライン出力の確認で遭遇します。バージョン管理、オープンソースプロジェクトへの貢献、マージコンフリクトのトラブルシューティングに携わるすべての人にとって、この形式の理解は重要です。