Git diffからファイル(db/irrelevant.php
)を除外しようとしています。 .gitattributes
という名前のdb
サブディレクトリにirrelevant.php -diff
という行を含むファイルを配置しようとしました。また、.git/info/attributes
を含むdb/irrelevant.php
というファイルを作成しようとしました。
すべての場合において、db/irrelevant.php
ファイルはGitバイナリパッチとしてdiffに含まれています。私が望むのは、そのファイルへの変更がdiffコマンドによって無視されることです。私は何を間違えていますか?
お粗末なファイルを除外するOmg、ドライバー、awk? git 1.9 something なので、次のことができます。
git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'
ああ、優雅さ!引用された回答と詳細は this answer by @torekをご覧ください
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
コマンドを(ドキュメントファイルなどを介して)ピアと共有できます。
patchutils プログラムコレクションの filterdiff プログラムを使用して、diffの一部を除外することもできます。例えば:
git diff | filterdiff -p 1 -x db/irrelevant.php
この方法は、受け入れられている答えよりも短いです。
git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'
さまざまな包含/除外の可能性に関する詳細については、 this other post を参照してください。
この1行のソリューションでは、他のユーティリティ/ダウンロードは必要ありません。
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
もちろん、file/to/exclude.txt
は除外したいファイルの名前です。
編集:クレジット ksenzee 差分を壊す削除されたファイルを修正するため。
KurzedMetal からの本当に良い答えは、私がやらなければならないことで、ファイルが変更されたことを確認する能力でしたが、私の場合は巨大なはずだった差分を生成しませんでした。
しかし、私の同僚は、より簡単で、私のために働いたアプローチを提案しました:
.gitattributes
によって無視されるファイルが存在するディレクトリにgit diff
ファイルを追加すると、次のコンテンツが含まれます。
file-not-to-diff.bin -diff
それでも、ファイルが変更された場合、git status
は「見る」ことができます。 git diff
もファイルが変更されたことを「認識」しますが、diff
は生成しません。
この例のファイルの.bin
拡張子は意図的なものです。これは、バイナリファイルに対するgitのデフォルトの動作であり、.gitattributes
による特別な処理を必要としないことは理解しています。しかし、私の場合、これらのファイルはgitおよび「file」ユーティリティによってテキストファイルとして認識され、これがうまくいきました。
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
非常に簡単で、標準のUNIXコマンドを使用して必要なものを除外できます。これらのコマンドは、Windows環境でもgit bashで使用できます。以下の例は、pom.xmlファイルのdiffを除外する方法を示しています。最初にファイル名のみの差分をマスターに確認し、次に「grep -v」を使用して不要なファイルを除外し、次にdiffを実行してprepapredリストでマスターします:
git diff master `git diff --name-only master | grep -v pom.xml`
私は次のことを行います:
git add *pattern_to_exclude*
git diff
git reset HEAD .
私はそれがエレガントなソリューションではないことを知っており、時々使用することはできません(たとえば、すでにステージングされたものがある場合)、複雑なコマンドを入力することなくトリックを行います
差分を視覚的に検査するためだけにこれを行いたい場合は、視覚的な差分ツール( Meld など)を使用すると、覚えやすい短いコマンドで実行できます。
最初に、まだ差分ツールをセットアップします。
$ git config --global diff.tool = meld
その後、ディレクトリdiffを実行できます。
$ git difftool --dir-diff
Meld(または選択したツール)で(ファイルごとに)差分を参照できます。単に無視したいファイルを開かないでください。