-diffで生成ファイルのDiffを抑制する

プルリクエストで生成ファイル、ロックファイル、ミニファイされたアセットのノイズの多いdiffを非表示にするための.gitattributesでの-diff属性の使用方法。

Diff Settings

詳細な説明

-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を抑制する必要があります。

試してみる — .gitattributes Generator

フルツールを開く