10

Git Pro Web サイトを読み、StackOverflow で複数の回答を読みましたが、残念ながら .gitattributes を機能させることができません。

を使用しているときは常にgit difftool、画像ファイル (PNG) などのバイナリ ファイルの違いを表示しようとします。

.gitattributes ファイルでさまざまな組み合わせを試しましたが、git difftoolコマンドを実行するたびにバイナリ ファイルを比較しようとします。

私のリポジトリのフォルダーには、
.git
.gitattributes
[私のプロジェクトのファイル サブディレクトリ] があります。

.gitattributes ファイルに対してフィルターの多くの組み合わせを試しました。例えば:

*.pbxproj バイナリ
*.png バイナリ

またはまた:

*.pbxproj バイナリ -diff
*.png バイナリ -diff

平:

*.pbxproj バイナリ
*.png バイナリ
*.pbxproj -diff -difftool
*.png -diff -difftool

毎回、.gitattributes ファイルをインデックスに追加してコミットするだけです。ただし、その後、 my を実行してgit difftool2 つのブランチ間の違いを調べると、次のようになります。

git difftool otherBranch HEAD

表示: 'MyApp.xcodeproj/project.pbxproj' リターンを押して 'diffmerge' を起動します:

表示: 'MyApp/Background1.png' リターンを押して 'diffmerge' を起動します:

なぜこれをやっているのですか?これらの特定のファイルの差分を表示する必要がないように、最終的に .gitattributes ファイルを適切に設定するにはどうすればよいですか?

さらに調査するために、git check-attr次のようにコマンドを使用しました。
git check-attr binary MyApp/MainBackground.png

出力はMyApp/MainBackground.png: binary: set...なぜ git difftool はまだ差分を表示するように強制するのだろうか!

4

2 に答える 2

9

これはdifftoolの欠陥のようです。説明したように.gitattributesファイルを使用すると、「git diff」の出力が意図したとおりに変更されるため、.projファイルの出力を「binaryfilesdifferent」に設定*.proj binaryまたは*.proj -diff変更します。git diffただし、difftoolは属性を見ることはありません。これは、difftoolが基本的にmergetoolと同じコードを呼び出し、バイナリファイルのマージがサポートされているためだと思います(一方を他方にコピーする場合のみ)。添付のパッチは、バイナリ属性が設定されているファイルをスキップするようにするdifftool-helperスクリプトへの小さな変更です。それはおそらくgitメーリングリストのためのものです。

--- git-difftool--helper    2011-06-03 21:48:08.000000000 +0100
+++ /opt/git/libexec/git-core/git-difftool--helper  2011-10-06 13:17:55.000000000 +0100
@@ -56,6 +56,10 @@
    fi
 }

+if test $(git check-attr diff "$1" | sed 's/.*diff: //') = 'unset'; then
+   echo skip binary file "\"$1\""
+else
+
 if ! use_ext_cmd; then
    if test -n "$GIT_DIFF_TOOL"; then
        merge_tool="$GIT_DIFF_TOOL"
@@ -70,3 +74,4 @@
    launch_merge_tool "$1" "$2" "$5"
    shift 7
 done
+fi
于 2011-10-06T12:19:03.397 に答える
1

patthoyts答えは私にとってはうまくいきました。

私にとっての秘訣は、使用していたgitのバージョンを把握することでしたgit-difftool--helper(MacPortsは複数のバージョンをインストールしていました)

私が使用した(difftoolオープンで):

lsof | grep "git-difftool--helper"
于 2012-11-08T02:51:00.980 に答える