我看过所有类似的问题。然而,我又检查了一遍,确实发生了一些奇怪的事情。

在一台服务器上(Solaris with Git 1.8.1),我克隆了Git存储库,然后将. Git文件夹复制到我现有的活动文件中。这很好,我可以跑了

git status

then

git diff [filename]

检查任何不同的文件。

在另一台服务器上(Solaris with Git 1.7.6),我做的完全相同

git diff [filename]

即使文件内容完全不同,也不会显示任何内容。我还测试了添加一个新文件,提交它,然后编辑。同样的问题,git status显示文件已更改,但git diff没有显示任何内容。如果我下载更改后的文件并在本地运行diff,那么我将得到diff输出。


当前回答

简短的回答

运行git add有时会有所帮助。

例子

Git状态显示已更改的文件和Git diff显示什么都没有…

> git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   package.json

no changes added to commit (use "git add" and/or "git commit -a")
> git diff
> 

运行git add可以解决不一致的问题。

> git add
> git status
On branch master
nothing to commit, working directory clean
> 

其他回答

我遇到了这个问题。我的情况与rcwxok发布的LESS问题类似。

在我的例子中,我将PAGER环境变量设置为PAGER='less -RSF'。

然而,与前面的答案不同,我不想删除-F选项,因为我显式地把它放在那里,希望防止在less中显示差异,如果它少于一个屏幕。

为了得到想要的结果,我没有删除-F,而是添加了-X: PAGER='less -RSFX'。这既解决了git差异的问题,此外,它防止显示短差异与较少。

我遇到了同样的问题,描述如下: 如果我输入

$ git diff

Git只是返回到提示符,没有任何错误。

如果我输入

$ git diff <filename>

Git只是返回到提示符,没有任何错误。

最后,通过阅读,我注意到git diff实际上调用mingw64\bin\diff.exe来完成这项工作。

是这样的。我正在运行Windows,并安装了另一个Bash实用程序,它改变了我的路径,因此它不再指向我的mingw64\bin目录。

如果你输入:

git diff

它只是返回到提示符,你可能有这个问题。

由git运行的div .exe位于你的mingw64\bin中 目录

最后,为了解决这个问题,我实际上复制了我的mingw64\bin目录到Git正在寻找的位置。我试过了,还是不行。

然后,我关闭我的Git Bash窗口并再次打开它,去到我的同一个存储库,现在它可以工作了。

我使用git svn,有一个文件有这个问题。对文件的每个祖先使用ls-tree,我注意到其中一个有两个子文件夹——Submit和Submit。由于我使用的是Windows,所以不能同时签出它们,从而导致了这个问题。

解决方案是直接从TortoiseSVN Repo-browser中删除其中一个,然后运行git svn fetch,然后执行git reset——hard origin/trunk。

对我来说,这与文件权限有关。 在我的项目上使用Mac/Linux的人似乎提交了一些具有非默认权限的文件,我的Windows Git客户端未能重现。

我的解决方案是告诉Git忽略文件权限:

git config core.fileMode false

其他见解:如何让Git忽略文件模式(chmod)的更改?

我怀疑您的Git安装或存储库有问题。

尝试运行:

GIT_TRACE=2 git <command>

看看能不能找到有用的线索。如果这没有帮助,只需使用strace,看看哪里出了问题:

strace git <command>