238

私はすべての同様の質問を見てきました。しかし、再確認したところ、何かおかしなことが確実に起こっています。

あるサーバー (Solaris with Git 1.8.1) で、Git リポジトリのクローンを作成し、.git フォルダーを既存のライブ ファイルにコピーしました。これは完全に機能し、実行できました

git status

それから

git diff [filename]

異なるファイルをチェックします。

別のサーバー(Git 1.7.6を搭載したSolaris)でもまったく同じことをしています

git diff [filename]

ファイルの内容が明らかに異なっていても、何も表示されません。また、新しいファイルの追加、コミット、および編集もテストしました。同じ問題でgit status、ファイルが変更されたと表示されますが、git diff何も表示されません。変更されたファイルをダウンロードしてローカルで差分を実行すると、差分出力が得られます。

4

16 に答える 16

103

ファイルをインデックスに追加しました:

git add file_name

そして実行しました:

git diff --cached file_name

git diff ここの説明を見ることができます。

git add を取り消す必要がある場合は、こちらを参照してください: How do I undo 'git add' before commit?

于 2015-02-10T14:58:02.830 に答える
101

私にとって、それはファイルのアクセス許可と関係がありました。私のプロジェクトで Mac/Linux を使用している誰かが、私の Windows Git クライアントが再現できなかったデフォルト以外のアクセス許可を持ついくつかのファイルをコミットしているようです。

私にとっての解決策は、ファイルのアクセス許可を無視するように Git に指示することでした。

git config core.fileMode false

その他の洞察: Git がファイル モード (chmod) の変更を無視するようにするにはどうすればよいですか?

于 2015-08-13T11:09:01.057 に答える
51

なんらかのプログラムによって何百もの行末が変更され、git diffすべてのソース ファイルが変更済みとしてリストされるという問題がありました。行末を修正した後git statusも、ファイルは変更済みとしてリストされています。

すべてのファイルをインデックスに追加してからインデックスをリセットすることで、この問題を解決できました。

git add -A
git reset

core.filemodefalse に設定されました。

于 2016-09-27T08:13:14.833 に答える
31

前の回答ですでに述べたように、この状況は行末の問題 (CR/LF と LF) が原因で発生する可能性があります。この問題 (Git バージョン 2.22.0 で) を次のコマンドで解決しました。

git add --renormalize .

マニュアルによると:

       --renormalize
           Apply the "clean" process freshly to all tracked files to
           forcibly add them again to the index. This is useful after
           changing core.autocrlf configuration or the text attribute in
           order to correct files added with wrong CRLF/LF line endings.
           This option implies -u.
于 2019-07-15T14:00:26.603 に答える
18

Git のインストールまたはリポジトリに問題があると思われます。

実行してみてください:

GIT_TRACE=2 git <command>

役に立つものがあるかどうかを確認してください。それでも問題が解決しない場合は、straceを使用して何が問題なのかを確認してください。

strace git <command>
于 2013-02-20T12:44:08.287 に答える
10

同様の問題がありました。git diff違いは表示されますが、表示されgit diff <filename>ません。( )LESSを含む文字列に設定していることがわかりました。そのフラグを削除すると、問題が解決しました。-F--quit-if-one-screen

于 2014-10-21T19:59:36.967 に答える
6

この問題に遭遇しました。私のケースは、 rcwxok によって投稿されLESS問題に似ていました。

私の場合、PAGER環境変数をに設定しましたPAGER='less -RSF'

ただし、以前の回答とは異なり、オプションを削除したくありませんでした。これは、画面全体よりも短い場合に-F差分が表示されないようにするために、オプションを明示的に配置したためです。less

目的の結果を得るために、 を削除する代わりに:-Fを追加しました。これにより問題が解決され、さらに、短い差分が表示されなくなります。-XPAGER='less -RSFX'git diffless

于 2016-11-06T10:43:53.967 に答える
3

私はちょうど同様の問題で実行しました。git diff file名前の一部を大文字にして Git インデックスにファイルを追加したため、何も表示されませんでした: GeoJSONContainer.js

その後、名前を に変更しGeoJsonContainer.js、変更が追跡されなくなりました。git diff GeoJsonContainer.js何も示していませんでした。強制フラグを使用してインデックスからファイルを削除し、ファイルを再度追加する必要がありました。

git rm -f GeoJSONContainer.js
git add GeoJSONContainer.js
于 2016-08-09T09:58:24.313 に答える
3

あなたのユースケースに関する私の仮定:

ファイルとディレクトリを含む既存のディレクトリがあり、現在のディレクトリのデータを変更せずに、他の場所から複製された Git リポジトリに変換したいと考えています。

本当に2つの方法があります。

リポジトリのクローン - mv .git- git reset --hard

この方法は、既存のリポジトリを空のディレクトリに複製してから、その.gitディレクトリを宛先ディレクトリに移動するという方法です。問題なく動作するには、通常、実行する必要があります

git reset --hard

ただし、それは現在のディレクトリ内のファイルの状態を変更します。ディレクトリの完全なコピー/rsync でこれを試して、何が変更されたかを調べることができます。少なくともその後は、 と の間git logに不一致は見られなくなりますstatus

新しいリポジトリの初期化 - 起点を指す

2 つ目はあまり邪魔になりません:cd目的地に移動し、次のコマンドで新しいリポジトリを開始します。

git init

次に、その新しいリポジトリに、別の場所に祖先があることを伝えます。

git remote add origin original_git_repo_path

それでは無事に

git fetch origin master

ローカル ファイルを変更せずにデータをコピーします。今はすべてうまくいくはずです。

エラーを起こしにくくするために、私は常に 2 番目の方法をお勧めします。

于 2013-02-19T15:27:19.883 に答える
1

次のように説明された同じ問題がありました。

$ git diff

Git はエラーなしでプロンプトに戻りました。

私が入力した場合

$ git diff <filename>

Git はエラーなしでプロンプトに戻りました。

git diff最後に、読んでみると、 が実際に を呼び出して作業を行っていることに気付きmingw64\bin\diff.exeました。

これが取引です。Windows を実行していて、別の Bash ユーティリティをインストールしたところ、パスが変更されたため、mingw64\binディレクトリを指しなくなりました。

したがって、次のように入力すると:

git diff

この問題が発生している可能性があるプロンプトに戻るだけです。

によって実行される実際の diff.exe はgit、mingw64\bin ディレクトリにあります。

mingw64\bin最後に、これを修正するために、ディレクトリを Git が探していた場所に実際にコピーしました。試してみましたが、それでも機能しませんでした。

次に、Git Bashウィンドウを閉じて再度開くと、失敗していた同じリポジトリに移動し、現在は機能しています。

于 2015-09-11T21:15:23.970 に答える