Git autocrlf 不会改变行尾

问题描述

在这里看到了几篇关于 ^M 如何出现在 diff 中的帖子。事实上,如果我在 GitHub 上运行 git showgit diff ...,我会看到整个文件都被更改了,并且被视为一行。

我的同事在 Mac 上工作,我在 Windows 上工作,我知道 Windows 行尾是问题所在,因此您需要按照 github's instructions 运行

$git config --global core.autocrlf true

我所做的。现在,当我使用文本编辑器提交文件时,我看到

提示:正在等待编辑器关闭文件... unix2dos: 将文件 full_path/.git/COMMIT_EDITMSG 转换为 DOS 格式...

他们还说跑:

$git add . -u
$git commit -m "Saving files before refreshing line endings"
$git add --renormalize .
$git commit -m "normalize all the line endings"

但问题是这没有任何作用。它只是说我的工作树是干净的。

现在,如果我跑:

$git config --global core.autocrlf true

然后立即在我的一个文件添加2个新行,添加并提交这个文件仍然让我陷入混乱,并且更改被解释为正在发生到整个文件。我仍然看到 ^M 无处不在。

我也看到了 this answer,它说要运行

# Remove everything from the index
$git rm --cached -r .

# Re-add all the deleted files to the index
# You should get lots of messages like: "warning: CRLF will be replaced by LF in <file>."
$git diff --cached --name-only -z | xargs -0 git add

# Commit
$git commit -m "Fix CRLF"

但是以 git diff 开头的行只是说“没有指定,没有添加。”我试着写:

$git diff --cached --name-only -z | xargs -0 git add . 

但是,git status 仍然表明没有区别。

然后,我运行了下一个提交字符串:

  1. 第一次提交:删除 test.txt
  2. 第二次提交:检出之前版本的 test.txt 并提交
  3. 在 test.txt 中添加 2 行文本

现在,git show 应该向我展示 test.txt 和少 2 行的版本之间的区别:但仍然有 ^M。尽管它说

提示:正在等待编辑器关闭文件... unix2dos: 将文件 full_path/.git/COMMIT_EDITMSG 转换为 DOS 格式...

很明显,它至少正在转换我的编辑消息,但是为什么这些解决方案都不适合我?为什么 git 实际上不会转换我的行尾?

编辑

我现在也尝试过:卸载 Git,删除我的程序文件中的文件夹,并在全局范围内删除 .gitconfig,然后使用选项“检查 Windows 样式,提交 Unix 样式行结尾”重新安装。但这不起作用。

手动进入并用“\n”替换行尾(通过查找和替换)已经奏效,现在 git diff 清晰显示,但我想要一种方法来确保我的项目永远不会遇到这种情况再次问题,因为注意到它需要实际查看认情况下我不显示的行尾。

请注意,将 *.txt eol=lf 添加到我的存储库中的 .gitattributes 并确保文件名完全是 .gitattributes,没有扩展名适用于逐个项目。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)