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

在一台服务器上(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 diff列出所有源文件更改。在修复行尾之后,git状态仍然将文件列为已修改。

我可以通过将所有文件添加到索引,然后重新设置索引来修复这个问题。

git add -A
git reset

核心。文件模式设置为false。

其他回答

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

尝试运行:

GIT_TRACE=2 git <command>

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

strace git <command>

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

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

git config core.fileMode false

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

我有一个问题,其中数百行结束修改了一些程序和git diff列出所有源文件更改。在修复行尾之后,git状态仍然将文件列为已修改。

我可以通过将所有文件添加到索引,然后重新设置索引来修复这个问题。

git add -A
git reset

核心。文件模式设置为false。

简短的回答

运行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
> 

我又偶然发现了这个问题。但这一次发生的原因不同。 我将文件复制到存储库中以覆盖以前的版本。现在我可以看到文件被修改了,但是diff没有返回diff。

例如,我有一个主页。xaml文件。 在文件资源管理器中,我粘贴了一个新的主页。Xaml文件超过了我当前存储库中的一个。 我在另一台机器上做了这项工作,只是把文件粘贴到这里。

文件显示已修改,但当我运行git diff时,它不会显示更改。

这可能是因为文件中的fileinfo已经更改,Git知道它实际上不是同一个文件。有趣。

您可以看到,当我在文件上运行diff时,它什么也不显示,只是返回提示符。