我现在遇到了一个关于存储库的问题,尽管我的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假把戏,效果不太好。


当前回答

在Visual Studio中,如果你正在使用Git,你可以自动生成.gitignore和.gitattributes文件。自动生成的.getattributes文件有以下一行:

* text=auto

这一行位于文件的顶部附近。我们只需要在该行前面添加#来注释该行。在此之后,事情按预期运行。

其他回答

git config core.fileMode false

解决了我的这个问题

https://git-scm.com/docs/git-config

TL; diana;

core.fileMode

如果为false,则忽略索引和工作树之间的可执行位差异;对FAT等损坏的文件系统很有用。看到git-update-index(1)。

默认为true,除非git-clone(1)或git-init(1)将探测和设置core。在创建存储库时,fileMode为false(如果合适)。

这个问题也可能由不同的文件权限引起,就像我的情况一样:

新克隆的存储库(Windows, Cygwin):

$ git ls-tree HEAD
100755 blob 8099ea496a2c78d71125d79a05855f60ebf07904    testfile
   ↑↑↑

裸远程存储库(Linux):

$ git ls-tree HEAD
100644 blob 8099ea496a2c78d71125d79a05855f60ebf07904    testfile
   ↑↑↑

请执行以下命令。这也许能解决问题。

# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard

我也一样。我可以在远程Git存储库中看到几个名称相同的图像,比如“textField.png”和“textField.png”,但在本地存储库中看不到。我只能看到“textField.png”在项目的代码中没有使用。

我的大多数同事在Ubuntu上使用ext4文件系统,而我在Mac上使用APFS。

多亏了Sam Elliott的回答,解决方法非常简单。首先,我让Ubuntu的一位同事删除了带有大写字母的冗余文件版本,然后提交并远程推送。

然后我运行以下程序:

# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard

最后,我们决定每个开发人员都应该改变他的Git配置,以防止这种情况再次发生:

# Local Git configuration
git config core.ignorecase true

or

# Global Git configuration
git config --global core.ignorecase true

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

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