git - windows + linux 双启动中的 CRLF 问题
Posted
技术标签:
【中文标题】git - windows + linux 双启动中的 CRLF 问题【英文标题】:git - CRLF issue in windows + linux dual boot 【发布时间】:2018-01-17 19:25:51 【问题描述】:我将用解决我问题的方法来回答我的问题。
反对者的注意事项:我知道根本原因已在其他各种线程中讨论(这就是我解决问题的方法)。这篇文章更多地是关于双引导系统如何导致你遇到这个问题。所以不,这个问题/答案不是重复的,而是一般问题类别的一个特定实例,在这个问题上向 SO 的存储库中添加了更多案例。
在家:我在 Linux 中编写代码。 LF
用作行尾在办公室:我在 Windows 中编码。 CRLF
用作行尾。
默认情况下,git 的 autocrlf
功能 (https://***.com/a/20653073/2715083) 让事情变得愉快。
但是,如果您在 Linux 和 Windows 上运行双启动系统,您可能会通过以下方式搞砸自己:
git pull
您在 Windows 环境中的 linux 环境中处理的一些文件,位于可以从双引导 linux 环境访问的位置。这会修改文件以包含 CRLF
结尾。
那么当你在linux中打开文件时,默认只有LF
,git diff
会说整个文件被修改,因为每个LF
都被更改为CRLF
在每一行。 (我被 Atom 警告过,它内置了这个差异计数)
【问题讨论】:
这些问题已经在here、here 和许多其他线程中讨论过了。如果您希望重新签出文件,here 是一种干净的解决方法。 git replacing LF with CRLF的可能重复 @eis 请看我的编辑 :) 我仍然认为这是重复的,例如已经回答了here 和here。 @eis 好酷。只要它对某人有帮助,重复并不重要。 【参考方案1】:您在谈论 text=auto 部分?我不确定是否需要将其包含在新的
.gitattributes
文件中,因为当我这样做时,ATOM 仍将文件显示为已修改。
是的,确实如此。
要强制 Git 应用 .gitattributes
指令,请参阅“Dealing with line endings”。
我首先要确保 core.autocrlf
设置为 false。
git config --global core.autocrlf false
然后:
git add . -u
git commit -m "Saving files before refreshing line endings"
rm .git/index
git reset
git status
git add -u
git add .gitattributes
git commit -m "Normalize all the line endings"
您也可以使用 , 来强制索引重新规范化:
git rm --cached -r .
git reset --hard
见“Force LF eol in git repo and working copy”
* text=auto eol=lf
【讨论】:
感谢详细步骤!通过强制所有行结尾为LF
,是否会在CRLF
为标准的Windows 中造成任何问题?
@Somjit 这取决于文件类型和您的 IDE。您可以将* text=auto eol=lf
限制为*.xxx
(某个扩展名)
是的,我想大多数代码编辑器都会好的。感谢您指出自定义扩展模块。【参考方案2】:
修复
-
删除/移动到其他位置的问题文件/文件夹
做
git checkout <hash> <your/files/location>
其中<hash>
是最后一次好的提交,your/files/location
是您想要解决 CRLF
问题的文件的位置。这基本上将从您的本地 .git
存储库中恢复旧版本。
为我工作。
如果您知道我遗漏了什么或解释不正确,请告诉我
【讨论】:
您正在规避问题。要真正修复它,请使用“.gitattributes”文件 @Philippe 你说的是text=auto
部分?我不确定是否需要将其包含在新的 .gitattributes
文件中,因为当我这样做时,ATOM 仍将文件显示为已修改...以上是关于git - windows + linux 双启动中的 CRLF 问题的主要内容,如果未能解决你的问题,请参考以下文章