3 回答
TA贡献1831条经验 获得超4个赞
可能导致此行为的问题有多个:
行结束规范化
我也遇到过这类问题。它归结为git自动将crlf转换为lf。这通常是由单个文件中的混合行结尾引起的。该文件在索引中被规范化,但是当git再次对其进行非规范化以将其与工作树中的文件区分开来时,结果是不同的。
但是,如果要解决此问题,则应禁用core.autocrlf,将所有行结尾更改为lf,然后再次启用它。或者您可以通过执行以下操作完全禁用它:
git config --global core.autocrlf false
您也可以考虑使用文件而不是core.autocrlf.gitattribute
。这样,您可以确保使用repo的每个人都使用相同的规范化规则,从而防止混合行结尾进入存储库。
还要考虑设置core.safecrlf来警告你是否希望git在执行不可逆的规范化时发出警告。
git 联机帮助说:
CRLF转换有可能破坏数据。autocrlf = true将在提交期间将CRLF转换为LF,在结账时将LF转换为CRLF。无法通过git重新创建在提交之前包含LF和CRLF混合的文件。对于文本文件,这是正确的做法:它校正行结尾,这样我们在存储库中只有LF行结尾。但对于意外归类为文本的二进制文件,转换可能会破坏数据。
不区分大小写的文件系统
在不区分大小写的文件系统上,当存储库中存在具有不同大小的相同文件名时,git会尝试检出两者,但只有一个文件系统最终结束。当git尝试比较第二个时,它会将它与错误的文件进行比较。
解决方案是切换到不区分大小写的文件系统,但在大多数情况下这是不可行的,或者重命名并在另一个文件系统上提交其中一个文件。
TA贡献1784条经验 获得超8个赞
我在Windows上遇到了这个问题,但是我没有准备好调查使用的后果config --global core.autocrlf false
我也不准备放弃我的藏品中的其他私人分支和好东西,并从一个新的克隆开始。我只需要完成一些事情。现在。
这对我有用,因为你让git完全重写你的工作目录:
git rm --cached -r .git reset --hard
(请注意,在原始问题的评论中建议之前,运行只是git reset --hard
不够好,也没有明确rm
的文件reset
)
TA贡献2051条经验 获得超10个赞
另一个可能对人有用的解决方案,因为没有一个文本选项适合我:
用
.gitattributes
一行替换内容:* binary
。这告诉git将每个文件视为二进制文件,它无法执行任何操作。检查违规文件的消息是否消失; 如果不是,你可以
git checkout -- <files>
将它们恢复到存储库版本git checkout -- .gitattributes
将.gitattributes
文件恢复到其初始状态检查文件是否仍未标记为已更改。
- 3 回答
- 0 关注
- 1864 浏览
添加回答
举报