web-dev-qa-db-ja.com

git diff --no-indexですが、複数のファイルがあります

私はgitdiffの出力形式が本当に好きで、任意の非git関連ファイルを比較するためにgit diff --no-indexとしてよく使用します。しかし、-no-indexを使用するときに私が知る限り、提供できるファイルのペアは1つだけです。次のように、複数のペアを渡すことができるようにしたいと思います。

git diff --no-index a.new a.old b.new b.old

そして、リポジトリでgit diffを実行することで得られるような出力を取得します。

diff --git a/a b/a
index e965047..ce01362 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-Hello
+hello
diff --git a/b b/b
index 2b60207..dd7e1c6 100644
--- a/b
+++ b/b
@@ -1 +1 @@
-Goodbye
+goodbye

Git diffまたは同様のツールでこれを行う方法はありますか?

4
Alec

git diff --no-indexは2つのディレクトリも受け入れ、これらを比較します。ファイルを2つの一時ディレクトリにコピーして、いつでもその周りにラッパースクリプトを記述できます。

それ以外に、比較するファイルの複数のペアを受け入れるdiffツールを知りません。 diffでさえ、ファイルの1つのペア、またはディレクトリとファイルのリストのみを受け入れます。

2
Jaap Eldering

これは基本的に2つのコンテキスト依存バージョン Jaapの回答 であり、それぞれにボーナスがあります。

git diff --no-indexを実行する前に、Git構成で diff.colorMoved を設定することをお勧めします。または、グローバルに設定する代わりに、--color-movedオプションを含めることができます。

diff.colorMoved設定では、ある場所から削除された線が差分の他の場所に表示される場合、異なる線の色が使用されます...ファイル内で移動したか、リファクタリングのように別のファイルに移動したかは関係ありません。

完全またはほぼ完全なセット

ディレクトリcurrent-versionに、他のファイルと比較したいファイルがいくつかあります。 new-versionで比較するファイルのセットの内容がほぼ同じである場合は、Jaapの提案を使用してください。

git diff --no-index current-version/ new-version/

比較する特定のファイル

一方のバージョンにほんの一握りのファイルがあり、もう一方のバージョンにたくさんのファイルがある場合、そのように、

┌ current-project
| ├ (various folders)
| └ src
|   ├ (various files)
|   ├ foo.c
|   └ bar.c
└ proposed-replacements
  ├ new-foo.c
  └ new-bar.c

... Gitの名前変更検出に機能を任せることができます。どのバージョンのGitが、これを行うために必要な名前変更追跡の程度を追加するのかわかりません(私はv2.18を使用しています)。また、私が行ったテストは、非常に些細なファイルのセットで行われました。

proposed-replacementsでファイルの大部分が「欠落」していることを実際に確認したくはありません。また、proposed-replacements 'ファイルにcurrent-projectに表示されるのと同じ名前/パスをわざわざ与えたくないので、それらを元の場所に残し、名前の変更と変更のみを含むフィルターに入れます。ファイル。

git diff --no-index --diff-filter=RM current-project/ proposed-replacements/
diff --git a/current-project/src/foo.c b/proposed-replacements/new-foo.c
similarity index 65%
rename from current-project/src/foo.c
rename to proposed-replacements/new-foo.c
index dd51990..64445b1 100644
--- a/current-project/src/foo.c
+++ b/proposed-replacements/new-foo.c
@@ -1,4 +1,4 @@
 octopus
 cow
-dog
 tiger
+flamingo

diff --git a/current-project/src/bar.c b/proposed-replacements/new-bar.c
similarity index 87%
rename from current-project/src/bar.c
rename to proposed-replacements/new-bar.c
...