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中打开文件时,默认只有LFgit 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 问题的主要内容,如果未能解决你的问题,请参考以下文章

Windows + linux 双系统修改启动顺序

Windows和linux双系统——改动默认启动顺序

安装Linux双系统取消快速启动,为什么在双启动时禁用Windows 8上的快速启动?

linux和window双系统下修改系统启动项

linux和windows双系统设置默认启动系统

如何修改LINUX和WINDOWS双系统的启动顺序和等待时间啊?