我现在遇到了一个关于存储库的问题,尽管我的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,这可能是由操作系统的安全特性引起的。
在我工作的存储库中,有一个二进制文件带有*。App作为文件类型。
这只是一些序列化的数据,但macOS处理所有*。App文件作为一个应用程序,由于该文件没有被用户下载,系统认为它是不安全的,并添加了com.apple.quarantine文件属性,以确保该文件不能执行。
但是在文件上设置这个属性也会改变文件,因此它会显示在Git更改集中,而没有任何恢复它的方法。
您可以通过运行$ xattr file.app来检查是否有相同的问题。
解决方案非常简单,只要您不需要使用该文件。只要加上*。应用二进制到你的.gitattributes。
对于新版本的macOS,这可能是由操作系统的安全特性引起的。
在我工作的存储库中,有一个二进制文件带有*。App作为文件类型。
这只是一些序列化的数据,但macOS处理所有*。App文件作为一个应用程序,由于该文件没有被用户下载,系统认为它是不安全的,并添加了com.apple.quarantine文件属性,以确保该文件不能执行。
但是在文件上设置这个属性也会改变文件,因此它会显示在Git更改集中,而没有任何恢复它的方法。
您可以通过运行$ xattr file.app来检查是否有相同的问题。
解决方案非常简单,只要您不需要使用该文件。只要加上*。应用二进制到你的.gitattributes。
我猜你用的是Windows。你链接到的GitHub页面的细节是相反的。问题是CR + LF行结束已经提交到存储库,因为您有核心。如果将selflf设置为true或input, Git希望将行结束符转换为LF,因此Git状态显示每个文件都被更改了。
如果这是一个您只想访问但不涉及的存储库,则可以运行以下命令来仅仅隐藏问题,而不实际解决问题。
git config core.autocrlf false
如果这是一个您将积极参与并可以提交更改的存储库。您可能希望通过提交将存储库中的所有行结束符更改为使用LF而不是CR + LF来修复这个问题,然后采取措施防止将来再次发生这种情况。
下面的代码直接取自gitattributes手册页,应该在一个干净的工作目录中执行。
echo "* text=auto" >>.gitattributes
rm .git/index # Remove the index to force Git to
git reset # re-scan the working directory.
git status # Show files that will be normalized.
git add -u
git add .gitattributes
git commit -m "Introduce end-of-line normalization"
如果在git状态中出现了任何不应该被规范化的文件,在运行git add -u之前取消设置它们的文本属性。
manual.pdf -text
相反,Git不检测的文本文件可以手动启用规范化。
weirdchars.txt text
我也一样。我可以在远程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