web-dev-qa-db-ja.com

「git diff」からファイルを除外したい

Git diffからファイル(db/irrelevant.php)を除外しようとしています。 .gitattributesという名前のdbサブディレクトリにirrelevant.php -diffという行を含むファイルを配置しようとしました。また、.git/info/attributesを含むdb/irrelevant.phpというファイルを作成しようとしました。

すべての場合において、db/irrelevant.phpファイルはGitバイナリパッチとしてdiffに含まれています。私が望むのは、そのファイルへの変更がdiffコマンドによって無視されることです。私は何を間違えていますか?

185
Michael

お粗末なファイルを除外するOmg、ドライバー、awk? git 1.9 something なので、次のことができます。

git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'

ああ、優雅さ!引用された回答と詳細は this answer by @torekをご覧ください

263
Mr_and_Mrs_D

No opコマンドを使用してカスタムdiffドライバーをセットアップし、無視する必要があるファイルに割り当てることができます。

リポジトリ固有の差分ドライバを作成このコマンドで

git config diff.nodiff.command /bin/true

または、--globalを使用してすべてのリポジトリを作成します。

/bin/trueがMacOSに存在しない場合、代替は/usr/bin/trueまたはechoを使用します)。

その後、無視するファイルに新しいdiffドライバーを割り当てます.git/info/attributesファイル内。

irrelevant.php    diff=nodiff

この状態を他の開発者と共有することになっている場合は、.gitattributesの代わりに.git/info/attributesを使用し、git configコマンドを(ドキュメントファイルなどを介して)ピアと共有できます。

60
KurzedMetal

patchutils プログラムコレクションの filterdiff プログラムを使用して、diffの一部を除外することもできます。例えば:

git diff | filterdiff -p 1 -x db/irrelevant.php
34

この方法は、受け入れられている答えよりも短いです。

git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'

さまざまな包含/除外の可能性に関する詳細については、 this other post を参照してください。

22

この1行のソリューションでは、他のユーティリティ/ダウンロードは必要ありません。

git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`

もちろん、file/to/exclude.txtは除外したいファイルの名前です。

編集:クレジット ksenzee 差分を壊す削除されたファイルを修正するため。

17
Ben Roux

KurzedMetal からの本当に良い答えは、私がやらなければならないことで、ファイルが変更されたことを確認する能力でしたが、私の場合は巨大なはずだった差分を生成しませんでした。

しかし、私の同僚は、より簡単で、私のために働いたアプローチを提案しました:

.gitattributesによって無視されるファイルが存在するディレクトリにgit diffファイルを追加すると、次のコンテンツが含まれます。

file-not-to-diff.bin -diff

それでも、ファイルが変更された場合、git statusは「見る」ことができます。 git diffもファイルが変更されたことを「認識」しますが、diffは生成しません。

この例のファイルの.bin拡張子は意図的なものです。これは、バイナリファイルに対するgitのデフォルトの動作であり、.gitattributesによる特別な処理を必要としないことは理解しています。しかし、私の場合、これらのファイルはgitおよび「file」ユーティリティによってテキストファイルとして認識され、これがうまくいきました。

7
user3589608

Ben Roux's ソリューションに似ていますが、とにかく共有します:

git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print $2}' | xargs git diff

または、変更がすでにローカルにコミットされている場合:

git diff --name-only Origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff Origin/master

例:

git status --porcelain | grep -v docs | awk '{print $2}' | xargs git diff Origin/master

git diff --name-only Origin/master | grep -v docs | xargs git diff Origin/master
1
Chris Montoro

非常に簡単で、標準のUNIXコマンドを使用して必要なものを除外できます。これらのコマンドは、Windows環境でもgit bashで使用できます。以下の例は、pom.xmlファイルのdiffを除外する方法を示しています。最初にファイル名のみの差分をマスターに確認し、次に「grep -v」を使用して不要なファイルを除外し、次にdiffを実行してprepapredリストでマスターします:

git diff master `git diff --name-only master | grep -v pom.xml`
1

私は次のことを行います:

git add *pattern_to_exclude*
git diff
git reset HEAD .

私はそれがエレガントなソリューションではないことを知っており、時々使用することはできません(たとえば、すでにステージングされたものがある場合)、複雑なコマンドを入力することなくトリックを行います

1
BlueMagma

差分を視覚的に検査するためだけにこれを行いたい場合は、視覚的な差分ツール( Meld など)を使用すると、覚えやすい短いコマンドで実行できます。

最初に、まだ差分ツールをセットアップします。

$ git config --global diff.tool = meld

その後、ディレクトリdiffを実行できます。

$ git difftool --dir-diff

Meld(または選択したツール)で(ファイルごとに)差分を参照できます。単に無視したいファイルを開かないでください。

0
mkasberg