web-dev-qa-db-ja.com

git diffは、ファイル全体が変更されていない場合に変更されていると見なします

Git diffエンジンは、ファイル全体が変更されていないのに変更されていると見なしています。たとえば、次のコミットを使用します。 https://github.com/etiago/phpvirtualbox/commit/626e09958384f479f94011ac3b8301bd497aec51

ここでは、ファイルlib/vboxconnector.phpに2807個の追加と2778個の削除があることがわかります。さらに、手動でgit diffを実行すると、実際には、ファイル全体が削除(マイナス記号)として取り込まれ、新しいファイル全体が追加として取り込まれます。ただし、ファイルには多くの共通点があり、Gitは単に無視しました。

同一ファイルのファイル全体を返すdiff を見ましたが、2つのコミット間に空白の変更が存在しないため、そうではありません。

さらに、ファイルの2つのコミット(626e09958384f479f94011ac3b8301bd497aec51および626e09958384f479f94011ac3b8301bd497aec51^1)Meldを使用してそれらを比較すると、正しい差分分析が得られます。

便宜上、ファイルの2つのコミットをDropboxにアップロードしました: commit_1commit_2

43
Tiago Espinha

vboxconnector.php_1では、すべての行がCRLFシーケンスで終了します。

vboxconnector.php_2では、すべての行がLFだけで終了します。

したがって、ファイルのすべての行が変更されています。

git diff --ignore-space-at-eolを使用してみてください。

この質問への回答 で役立つ情報を見つけることもできます。

66
rob mayoff