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

在一台服务器上(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安装或存储库有问题。

尝试运行:

GIT_TRACE=2 git <command>

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

strace git <command>

其他回答

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

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

git add -A
git reset

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

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

尝试运行:

GIT_TRACE=2 git <command>

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

strace git <command>

我对你的用例的假设:

您有一个包含文件和目录的现有目录,现在希望将其转换为从其他地方克隆的Git存储库,而不需要更改当前目录中的任何数据。

实际上有两种方法。

克隆repo - mv .git - git重置-硬

此方法就是您所做的—将现有存储库克隆到一个空目录中,然后将.git目录移动到目标目录中。为了顺利工作,通常需要运行

git reset --hard

但是,这会改变当前目录中文件的状态。您可以在目录的完整复制/rsync上尝试此操作,并研究有哪些变化。至少之后你应该不再看到git日志和状态之间的差异。

Init新存储库-指向原点

第二种方法不那么麻烦:cd到您的目的地,并用

git init

然后你告诉这个新的存储库,它在其他地方有一个祖先:

git remote add origin original_git_repo_path

然后安全

git fetch origin master

在不更改本地文件的情况下复制数据。现在应该没事了。

我总是推荐第二种更不容易出错的方法。

我也遇到过类似的问题。git diff文件没有显示任何内容,因为我将文件添加到git索引中,其中部分名称是大写的:GeoJSONContainer.js。

之后,我将其重命名为GeoJsonContainer.js,并停止跟踪更改。git diff GeoJsonContainer.js没有显示任何东西。我必须用强制标志从索引中删除文件,并再次添加文件:

git rm -f GeoJSONContainer.js
git add GeoJSONContainer.js

我将文件添加到索引中:

git add file_name

然后跑着说:

git diff --cached file_name

你可以在这里看到git diff的描述。

如果你需要撤销你的git添加,那么请参阅这里:我如何在提交前撤销'git add' ?