web-dev-qa-db-ja.com

「git diff」は何もしません

これはどこかの設定エラーだと思いますが、どこにあるのかわかりません。通常のgitコマンドは正常に動作するように見えますが、「git diff」は何もしません。安全のため、.gitconfigファイルから外部diffツールを削除しました。これはMacPortsを介してインストールされ、最新バージョン(1.7.2.2)です。

私が見るのは、ワークスペースから「git diff」を実行すると、何もせずに終了するだけです。

$ git --version
git version 1.7.2.2
$ git diff
$ 

ルートワークスペースから1つのディレクトリをバックアップする場合、「git diff」と入力すると次のようになります。

$ git diff
usage: git diff [--no-index] <path> <path>

私はgitリポジトリの下にいないので、これは予想される動作です。

これをトラブルシューティングするために私ができることに関するアイデアはありますか?

87
Tom Lianza

git diffのデフォルトの出力は、インデックスにコミットまたは追加されていない変更のリストです。変更がない場合、出力はありません。

git diff [--options] [-] […]

このフォームは、インデックス(次のコミットのステージング領域)に対して行った変更を表示します。言い換えれば、違いは、あなたがcouldを使用してgitにさらにインデックスを追加するよう指示しますが、まだ追加していないということです。

詳細については、 documentation をご覧ください。特に、例までスクロールダウンして、このセクションを読んでください。

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. インデックスを使用して作業コピーを比較する
  2. HEADとインデックスを比較する
  3. HEADと作業コピーを比較する

ご想像のとおり、ワークスペースの外では、gitは何を比較するのか分からないため、比較する2つのパスを明示的に指定する必要があります。

102
Douglas

注: git 1.8.5または1.9以降、2013年第4四半期

ユーザーが作業ツリーの外に「git diffを入力すると、自分が1本の中にいると考えて、現在のエラーメッセージはシングルライナーです:

usage: git diff --no-index <path> <path>

彼に間違いを認識させるのに十分ではないかもしれません。

明示的なコマンドラインオプションなしで「Not a git repository」モードに陥った場合、エラーメッセージに「--no-index」を追加します。そうするように指示してください。


見る:

diff --no-index」のドキュメントを明確にします。
リポジトリ内にない場合、--no-indexが暗黙指定され、2つの引数が必須であることを明記してください。

diff-no-indexからのエラーメッセージを明確にし、CWDがリポジトリ内にないため、2つの引数が必須であることをユーザーに通知します。

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>
4
VonC

作業ディレクトリがクリーンで、前回の更新との違いがない場合は何もしません。ファイルを編集してからgit diffを再度実行すると、差分が表示されます。

2
Jaanus

実際のリポジトリまたはワークコピーの外部で使用している場合、その動作はGNU diffと同じです。比較する2つのディレクトリまたはファイルに通知する必要があります。例:

git diff old_dir new_dir

それらの間に違いがある場合、出力は期待どおりに表示されます。

1
jweyrich

あなたの場合ではありませんが、おそらくあなたが渡すファイルが存在しないためです

$ git difftool HEAD HEAD^ -- path/that-not-exists

何も起こらない

0
deFreitas