如何阻止Git在本地文件中插入回车符?

4

我一直在尝试各种不同的配置来阻止Git插入CR(回车符)。我有一个本地文件,在源代码库中具有LF(而非CRLF)行尾:

$ cat -vT  Source/watchr.bat
echo OFF
echo ==========================================================
echo ==========================================================
echo The "watchr" command is deprecated.
echo The new command is sidekick.bat
echo " _
echo "| |
echo "| |_ _   _ _ __   ___

注意:这里没有^M,因此其中没有回车符。
这是大约80个文件中的一个,因此提交将在Git历史记录中创建大量不必要的混乱。
现在看一下来自git diff的输出:
$ gd -R Source/watchr.bat
+echo OFF^M
+echo ==========================================================^M
+echo ==========================================================^M
+echo The "watchr" command is deprecated.^M
+echo The new command is sidekick.bat^M
+echo " _                      ^M
+echo "| |                    ^M
+echo "| |_ _   _ _ __   ___ ^M

每行都有烦人的^M字符,为什么?如何解决?

相关设置:

$ git config --global core.autocrlf
true

$ git config  core.autocrlf
false

$ cat -vT .gitattributes
# Set default behavior to automatically normalize line endings.
* text=

将设置更改为input(或false)和auto.gitattributes)没有影响。
Git仍然想将CR插入watchr.bat文件中。
我主目录中的.gitconfig也有autocrlf = true
如何停止Git这样做?
平台:Git版本1.9.5.msysgit.0,Windows 7。

@Henke https://dev59.com/i4bca4cB1Zd3GeqPas8g#27909336 - jcollum
有趣。 根据我阅读的你的回答,你建议完全删除.gitattributes文件。这与此答案此答案形成对比,它们都_推荐_使用.gitattributes。 ~ * ~ * ~ 对于任何来到这里(可能包括我未来的自己)并且有时间进行实验的人,我建议将* text = auto替换为* -crlf.gitattributes中查看会发生什么。 - Henke
我已经近十年没有在Windows上工作了,所以我的经验非常过时。也许现在情况不同了。这个问题已经快8年了。 - jcollum
就我而言,这个回答对你的问题非常准确。就像dos2unix一样,Git只能猜测一个文件是否为文本文件。这两个工具有时会做出错误的猜测。 也许这就是你在回答中写的内容? (Windows不能从文件内容中很好地猜测出它的类型。) - Henke
2个回答

3

不行。改变全局设置后,我仍然在行尾看到^M字符。本地配置已经设置为false。 - jcollum
已解决。请查看我的回答。 - jcollum
所以这真的是一个.gitattributes问题... +1 - VonC
这是一个Git在Windows上的bug吗? - jcollum
@jcollum 我认为不是这样,除非检查.gitattributes文件的其余部分,看看其他指令是否可能是罪魁祸首。 - VonC

1
解决方法是删除 .gitattributes 文件。我曾试过在 .gitattributes 中注释掉* text=auto,但显然git并未"看到"它。我的同事删除了该文件,推送后我拉取了该文件,突然"添加一堆CRs"的行为消失了。
我试图找到一种让git查看新更改的 .gitattributes(我所做的本地编辑)的方法。没有找到任何git命令来执行此操作,因此我必须假设每次进行差异比较时,git都会检查该文件。但似乎情况并非如此。
也许这是Windows中git的一个bug(因为在Windows中文件监视程序不太稳定)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接