323

db/irrelevant.phpGit差分からファイル()を除外しようとしています。その行でdb呼ばれるサブディレクトリにファイルを入れてみました。また、を含む という名前のファイルを作成してみました。.gitattributesirrelevant.php -diff.git/info/attributesdb/irrelevant.php

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

4

14 に答える 14

444

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

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

(Winodwsでは、一重引用符'を二重引用符に置き換えます"。)

ああ、エレガンス!引用された回答を参照してください。詳細については、@torekによるこの回答を参照してください。

于 2016-10-09T12:40:04.857 に答える
69

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

このコマンドを使用して、リポジトリ固有の差分ドライバを作成します

git config diff.nodiff.command /bin/true

または、すべてのリポジトリに対して--global

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

次に、ファイルで無視するファイルに新しい差分ドライバーを割り当て.git/info/attributesます。

irrelevant.php    diff=nodiff

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

于 2012-05-02T20:43:41.890 に答える
68

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

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

さまざまな包含/除外の可能性の詳細については、この他の投稿をお読みください

于 2018-01-15T08:30:09.477 に答える
45

最も簡単な答え

git diff ':!db/irrelevant.php'

それ':!<path>'はあなたのdiffコマンドの直後です。diffコマンドは必要に応じて複雑にすることができ、必要に応じて、のようなワイルドカードを使用し*.min.jsたり、複数の除外(引用符で囲まれたブロックをスペースで区切る)を追加したりできます。

于 2019-11-13T21:07:23.253 に答える
39

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

git diff | filterdiff -p 1 -x db/irrelevant.php
于 2012-05-02T18:00:27.030 に答える
26

私がする必要があることに対するKurzedMetalからの本当に良い答えは、ファイルが変更されたことを確認する機能でしたが、私の場合は巨大であった可能性のある差分を生成しませんでした。

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

無視されるファイルが存在するディレクトリに次の内容.gitattributesのファイルを追加します。git diff

file-not-to-diff.bin -diff

それでもgit status、ファイルが変更されたかどうかを「確認」できます。git diffまた、ファイルが変更されたことを「確認」しますが、は生成されませんdiff

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

于 2018-12-20T17:30:58.873 に答える
16

この1行のソリューションでは、他のutils/downloadsは必要ありません。

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

file/to/exclude.txtもちろん、除外したいファイルの名前はどこにありますか。

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

于 2012-05-02T20:45:38.803 に答える
11

gitルートディレクトリに相対的

git diffオプションの除外を受け入れます

git diff -- ":(exclude)thingToExclude"

ワイルドカードを追加することをお勧めします

git diff -- ":(exclude)*/thingToExclude/*"

特定のファイルタイプをターゲットにする

git diff -- ":(exclude)*/$1/*.png"

または、ドットファイル用の小さなスクリプトをドロップします

.bash_profileまたはなど.zshrc

gde() {
    # git diff exclude files or folders 
    # usage: 
    # gde fileOrFolderNameToExclude
    git diff -- ":(exclude)*/$1/*"
}
于 2019-09-11T15:56:35.187 に答える
7

既存の回答に基づいて、ディレクトリ内のどこにあるかに関係なくファイルパターンを除外する場合は、対応するgitpathspec**:を使用します。

git diff -- ':!**/yarn.lock'
于 2020-07-26T00:42:33.133 に答える
2

それは非常に簡単で、標準のUNIXコマンドを使用して必要なものを除外できます。これらのコマンドは、Windows環境でもgitbashで使用できます。以下の例は、pom.xmlファイルのdiffを除外する方法を示しています。最初に、ファイル名のみをマスターするためにdiffをチェックし、次に'grep -v'を使用して、不要なファイルを除外してから、prepapredリストを使用してdiffをマスターするために再度実行します。

git diff master `git diff --name-only master | grep -v pom.xml`
于 2019-04-16T14:27:01.470 に答える
2

私は次のことをします:

git add *pattern_to_exclude*
git diff
git reset HEAD .

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

于 2019-05-28T14:48:29.837 に答える
1

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

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
于 2016-09-11T03:08:57.873 に答える
0

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

まず、まだ行っていない場合は、差分ツールを設定します。

$ git config --global diff.tool = meld

次に、ディレクトリ差分を実行できます。

$ git difftool --dir-diff

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

于 2018-02-06T20:41:01.997 に答える
0
git diff remote/master..master --name-only -- ':!README.rst'

くれた(gitバージョン2.11.0)

fatal: There is nothing to exclude from by :(exclude) patterns.
Perhaps you forgot to add either ':/' or '.' ?
git diff remote/master..master --name-only -- './*' ':!README.rst'

うまく機能しました、ソース:https ://stackoverflow.com/a/30084612/5155484

于 2021-06-17T12:58:11.357 に答える