gpt4 book ai didi

linux - git:编辑文件导致使用 git diff 时出现 ^M

转载 作者:IT王子 更新时间:2023-10-29 01:04:34 29 4
gpt4 key购买 nike

我在本地 git 存储库中有几个源文件。这些文件是从远程 git 仓库中提取的。当我执行“$git status”时,我看到以下内容:

$git status

# On branch master
nothing to commit, working directory clean

但是,当我编辑任何源文件(使用 vim 或 gedit)时,^M 总是被添加到我添加的行的末尾。换句话说,在我进行更改后,我会看到以下内容:

$git status

# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: sourcefile1.c
#
no changes added to commit (use "git add" and/or "git commit -a")

$git diff sourcefile1.c
...
+ This is a test line ^M
...

我不知道为什么会这样,但似乎与我使用的编辑器或 git 本身无关。我知道有一种方法可以强制 git to ignore ^M ,但我真的很想知道出了什么问题,为什么要插入这些 ^M,以及如何阻止这种情况发生。

我正在使用带有 Linux 内核 3.11.0 的 Ubuntu

感谢任何帮助。

最佳答案

当您执行 git-diff 时,如果行尾有 CR(^M),它会发出警告。这被认为是“空白错误”,并且无论是否存在真正的差异,默认情况下都会显示为红色。您可以通过创建包含以下行的 .gitattributes 文件来让它关闭

* whitespace=cr-at-eol

这不会影响文件内容,它只是禁用来自 git-diff 的警告。

你没有说文件最初是否有 CRLF 行结尾,但 Vim 极不可能在没有警告你的情况下将它从 Unix 转换为 DOS 行结尾。我发现 git 中的行结束转换是一个真正的痛苦和困惑,只需在 .gitattributes 中添加一行

将其关闭
* -text

这会阻止 git 进行任何神奇的转换,并将其留给您。

你可能想检查工作目录中的所有文件,看看它们当前有哪些行结束符(Vim 应该在状态栏中告诉你)。另见 Git line endings after normalization对于几个可以从一个转换为另一个的 git 别名。如果这是一个仅限 Linux 的存储库,将所有内容一次性转换为 Unix 格式可能是个好主意。

关于linux - git:编辑文件导致使用 git diff 时出现 ^M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25083438/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com