linux - 使用 `.gitattributes` 文件修复 Git 存储库中的行尾

标签 linux windows git eol gitattributes

需要修复的地方:

我有一个包含单个 .md 文件的存储库,其中包含我正在写的一篇文章。

我在几台不同的计算机上编辑文件,一台运行 Linux,另一台运行 Windows。

现在在 Windows 中查看 git diff,我做了一些更改,我可以看到我的文章显示为很好地分隔的文本行......所有这些都将被删除并替换为一个长的段落由 ^M 分隔的行。

我知道 ^M 指的是 Windows 的 CLRF 行结尾。

diff 结果表明我在 Linux 中启动了该文件(完全有可能;我不记得了),此后将其保存在 Windows 中并且所有行尾都已被替换。

我希望能够在两个操作系统上打开文件,并显示应有的行,并有一个显示换行符的 diff 结果(而不是 ^M 占位符)并且仅更改实际内容。

我尝试过的:

我做了一些background reading , 阅读 nice overview行尾和 Git 设置,甚至尝试按照 another Stack Overflow question 中的命令进行操作.

就目前而言,我在存储库的顶层有一个 .gitattributes 文件,我已将其提交给存储库本身。它只包含两行:

# These files are text and should be normalised (convert Windows' CLRF to LF)
*.md text

我试过这个(source):

git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"

还有这个(source):

git rm --cached -r .
git config core.autocrlf input
git diff --cached --name-only -z | xargs -0 git add
git commit -m "Fixed crlf issue"

在第二种情况下,最后一条命令告诉我没有什么可提交的。 (我也不喜欢更改 core.autoclrf 的想法,因为我试图纯粹通过 .gitattributes 来完成此操作,但我感到很沮丧。)

很乐意回答问题并提供更多详细信息。我可能会出错的任何想法?我错过了一步吗?

最佳答案

尝试使用

*.md text eol=native

代替

*.md text

在你的 .gitattributes 中。

我确实设置了一个带有 CR-LF 文件的小型测试仓库,并按照您的第一个程序执行规范化:

git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"

checkin 时正确规范化的文件。 但是,奇怪的是,即使我在 OSX 上,它在 checkout 时仍然保持 CR-LF。

据推测,core.eol 的默认值是 native。所以,我希望 git 只使用 LF 来 check out 我的文件。但似乎出于某种原因,它只是没有这样做。 所以,我对 .gitattributes 的理解是有缺陷的,或者我们有一个错误要提交给 git...

无论如何,正如我所说,在 .gitattributes 中显式设置 eol=native 对我有用。

关于linux - 使用 `.gitattributes` 文件修复 Git 存储库中的行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21828900/

相关文章:

c# - 如何使用 XAML 中的资源值和绑定(bind)值格式化字符串?

windows - 性能计数器权限 : admin not required?

git - 由于 git pull in git 2.29,VScode git 同步被破坏

wordpress - 使用 Tower Git 登录 WPEngine Git Push

c++ - ALSA:以共享模式打开PCM设备

c++ - 如何使用 QProcess 通过 Ping 检测 "Network is Unreachable"?

windows - 如何从命令提示符快速打开当前目录?操作系统 - Windows

git - 在我的终端中并排着色的内联 git diff 输出

linux - 使用 bash 打印数组中最大值的索引

linux - linux下X上的系统范围键盘 Hook