-diffで生成ファイルのDiffを抑制する
プルリクエストで生成ファイル、ロックファイル、ミニファイされたアセットのノイズの多いdiffを非表示にするための.gitattributesでの-diff属性の使用方法。
詳細な説明
-diffによるDiffの抑制
一部のファイルはGitで追跡されていますが、レビュアーにとってノイズが多い、読めない、または意味のないdiffを生成します。-diff属性は、これらのファイルのテキストdiff出力をスキップするようGitに指示します。
一般的なユースケース
# ロックファイル(自動生成、大量のdiff)
package-lock.json text -diff
yarn.lock text -diff
pnpm-lock.yaml text -diff
Cargo.lock text -diff
poetry.lock text -diff
composer.lock text -diff
Gemfile.lock text -diff
Pipfile.lock text -diff
# ミニファイされたファイル
*.min.js text -diff
*.min.css text -diff
# ソースマップ
*.map text -diff
# 自動生成コード
*.generated.ts text -diff
*.pb.go text -diff
-diffの動作
-diffがマークされたファイルに対してgit diffを実行すると、Gitは次のように出力します:
Binary files a/package-lock.json and b/package-lock.json differ
ファイルは行末正規化(text属性)とマージのためにテキストとして扱われますが、diff出力は抑制されます。これはbinaryとは異なり、binaryはテキスト処理、diff、マージをすべて無効にします。
プルリクエストへの影響
GitHub、GitLab、Bitbucketでは、-diffのファイルはプルリクエストビューでデフォルトで折りたたまれます。これにより、数千行のロックファイルの変更が非表示になり、PRの可読性が大幅に向上します。
text -diff vs binary
| シナリオ | 使用する属性 |
|---|---|
| ロックファイル(テキスト、マージ必要、ノイズの多いdiff) | text -diff |
| 画像(バイナリデータ) | binary |
| ミニファイされたJS(テキスト、有用なdiffなし) | text -diff |
| コンパイル済み.exe(バイナリデータ) | binary |
重要な違い:text -diffは行末を正規化し、3ウェイマージを許可します。binaryは3つの機能すべてを無効にします。
大きなファイルの選択的Diff
ファイルが大きいが、時々diffを見たい場合は、コマンドラインでgit diff --textを使用して-diff属性をオーバーライドできます。
ユースケース
JavaScript/Node.jsプロジェクト(package-lock.json、yarn.lock)、Rustプロジェクト(Cargo.lock)、Pythonプロジェクト(poetry.lock)、または自動生成コードを含むプロジェクトは、プルリクエストをクリーンでレビューしやすく保つために、それらのファイルのdiffを抑制する必要があります。