我现在遇到了一个关于存储库的问题,尽管我的Git-fu通常很好,但我似乎无法解决这个问题。

当我克隆这个存储库,然后cd到存储库,git状态显示几个文件被更改。注意:我没有在任何编辑器或其他工具中打开存储库。

我试着遵循这个指南:http://help.github.com/dealing-with-lineendings/,但这对我的问题一点帮助都没有。

我试过git checkout。很多次,但似乎什么也没做。

我使用的是Mac,存储库本身没有子模块。

Mac上的文件系统是“Journaled HFS+”文件系统,不区分大小写。这些文件只有一行,每个文件大约79 KB(是的,您没有听错),因此查看git diff并没有特别有用。我听说过git的全局核心配置。trustctime false,这可能有帮助,当我回到存储库的计算机上时,我会尝试。

我用事实改变了文件系统的细节!我尝试了git配置——全局核心。Trustctime假把戏,效果不太好。


当前回答

我在MacOS上遇到了相关问题。

也就是说,有些人可能没有意识到,虽然MacOS的文件系统看起来是区分大小写的,但事实并非如此。它将存储混合的案例文件名,但是,例如,考虑Foo.py和Foo.py是同一个文件。

A colleague had created just such a scenario by making a foo.py from a Foo.py as part of a development scaffolding. (I.e., not only enforcing PEP8 module file naming conventions, but refactoring the contents significantly from the original such that we wanted to do that kind of work in parallel). When I pulled those changes, MacOS overwrote all the modifications from foo.py into Foo.py, which caused git to think I had made local changes, when I hadn't. When doing a fresh clone, git immediately claimed that Foo.py had significant changes even though it was a fresh clone.

解决方案是将foo.py重命名为一个完全不同的文件名,并且不与原始文件名冲突。在做出更改后,这个问题随着存储库的新克隆而消失了。

(有一个系统配置标志可以在MacOS中打开区分大小写的行为,但建议将其保留在默认设置中,因为切换该行为可能会破坏期望区分大小写的行为。)

其他回答

我想添加一个关于“为什么”会发生这种情况的更直接的答案,因为关于如何解决它已经有了一个很好的答案。

因此,.gitattributes有一个* text=auto设置,这导致了这个问题。

在我的例子中,GitHub主分支上的文件有\r\n个结尾。我已经拨出了存储库上的设置,以使用\n个结尾签入。但我不知道Git会检查出什么。它应该在我的Linux盒子(\n)上检出本机结尾,但我猜它检出了带有\r\n结尾的文件。Git抱怨是因为它看到了存储库中检出的\r\n个结尾,并警告我它将检入\n个设置。因此文件是“待修改”的。

这是我目前的理解。

我也有同样的问题。在Mac上也是如此。在Linux机器上查看存储库,我注意到我有两个文件:

geoip.dat和geoip.dat

我在Linux机器上删除了废弃的版本,并将存储库再次克隆到Mac上。当存在副本时,我无法提取、提交、保存或从我的存储库副本中提取。

在克隆了一个存储库之后,我在Mac上也遇到了同样的问题。它假定所有文件都已更改。

运行git config——global core后。输入时,它仍然将所有文件标记为已更改。在寻找修复后,我在主目录中遇到了.gitattributes文件,其中包含以下内容。

* text=auto

我把它注释掉了,从此以后任何其他克隆的存储库都可以正常工作。

我也遇到了同样的问题。在我的例子中,我克隆了存储库,一些文件立即丢失了。

这是由于文件的路径和文件名对Windows来说太长造成的。要解决该问题,请将存储库克隆到尽可能靠近硬盘驱动器根的位置,以减少文件路径的长度。例如,将其克隆到C:\A\GitRepo,而不是C:\ users Documents\yyy\Desktop\GitRepo。

为了防止它帮助其他人,这个问题可能还有另一个原因:不同版本的Git。我在Ubuntu 18.04 (Bionic Beaver)的机器上使用默认安装的Git版本,一切工作正常,但在Ubuntu 16.04上尝试使用Git克隆存储库时,一些文件显示为已修改。

这里的其他答案都没有解决我的问题,但是升级Git版本以匹配两个系统确实解决了这个问题。