2016-08-01 143 views
1

当我搜索时,我没有看到unix方面的问题,只是针对Unix/MS不兼容。git diff/format-patch输出包含^ M(回车)字符(Linux)

在我的情况下,在编辑现有源代码(在emacs中)和分段提交之后,由git diffgit format-patch生成的输出将回车符(^ M)放在我添加的每一行的末尾。我运行git diff master --cached > patch.patch。使用emacs或vim查看文件在每行代码末尾显示^M。另一方面,角色在nano,less或cat中不可见。如果我运行git diff master --cached,在启动的较少程序中,^M字符在我添加的每行代码后都可见,但不在源代码中。

我该如何解决这个问题?我使用的是CentOS 6,emacs 24.5.1和git 2.1.0。

回答

0

core.autocrlf

如果你正在编写在Windows和与人谁不(或反之亦然)的工作,你可能会遇到一些点行结束的问题。这是因为Windows在其文件中为换行符使用回车符和换行符,而Mac和Linux系统仅使用换行符。这是跨平台工作的一个微妙而令人难以置信的烦人的事实; Windows上的许多编辑器默默地用CRLF代替现有的LF风格的行结尾,或者当用户点击回车键时插入两个行尾字符。

Git可以通过在将文件添加到索引时将CRLF行结束符自动转换为LF来处理此问题,反之亦然,当它将代码检出到文件系统上时。您可以使用core.autocrlf设置打开此功能。如果你是一个Windows机器上,它设置为true - 这个结局LF转换成CRLF,当你看看代码:

$混帐配置--global core.autocrlf真正

如果你在一个使用LF行尾的Linux或Mac系统,那么当您签出文件时,您不希望Git自动转换它们;但是,如果一个带有CRLF结尾的文件被意外地引入,那么你可能希望Git修复它。你可以告诉Git的转换CRLF围绕LF上犯而不是其他方式通过设置core.autocrlf输入:

$混帐配置--global core.autocrlf输入

此设置应该离开你CRLF结尾在Windows结帐,但在Mac和Linux系统和存储库中LF结尾。

如果你是一个Windows程序员做一个Windows的唯一项目,那么你就可以关闭此功能,通过配置值设置为false记录信息库中的回车符:

$混帐配置 - global core.autocrlf false

这是从Git Configuration

+1

我不知道源代码是在什么操作系统上编写的,但我没有使用windows,但似乎^ M字符正被添加到'git diff'的输出中。我已经尝试了两个core.autocrlf作为输入和虚假无济于事 – bernie

相关问题