转载

换行符与Git CRLF

回车(Carriage Return)和换行(Line Feed)概念:

  • 回车CR:将光标移动到当前行开头;
  • 换行LF:将光标“垂直”移动到下一行,并不改变光标水平位置。

以上的概念只适用于打字机,现代计算机沿用的时候主要使用的是 回到行首换行+回到行首 的功能。看下面的例子:

1、在Windows下应用程序输出/n到文件,会被自动转换成/r/n

// output:
// first line
// second line
printf("first line/nsecond line");

// test.txt output;
// first line/r/nsecond line
std::fstream fout("test.txt", std::ios::out);
if (fout.is_open())
{
fout.write("first line/nsecond line", sizeof("first line/nsecond line"));
fout.close();
}

2、在windows下应用程序输出/r到文件,不会被转换,并且并不会起到“将光标移动到当前行开头”的作用

// output:
// second line
printf("first line/rsecond line");

// test.txt output;
// first line/rsecond line
std::fstream fout("test.txt", std::ios::out);
if (fout.is_open())
{
fout.write("first line/rsecond line", sizeof("first line/rsecond line"));
fout.close();
}

3、在Windows下应用程序输出/r/n到文件,/r/n会被自动转换成/r/r/n

// output:
// first line
// second line
printf("first line/r/nsecond line");

// test.txt output;
// first line/r/r/nsecond line
std::fstream fout("test.txt", std::ios::out);
if (fout.is_open())
{
fout.write("first line/r/nsecond line", sizeof("first line/r/nsecond line"));
fout.close();
}

不同系统下的换行符

CR、LF、CR/LF为不同操作系统上使用的换行符:

  • Windows/DOS系统:采用CR/LF表示下一行;
  • Unix/Linux系统:采用LF表示下一行;
  • Mac OS系统:采用CR表示下一行;
  • Mac OS X系统:采用LF表示下一行( Mac OS X已经改成和Unix/Linx一样使用LF )。

CR使用符号’/r’,十进制ASCII代码是13,十六进制代码为0x0D;LF使用’/n’符号表示,ASCII代码是10,十六制为0x0A。所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示,而UNIX和苹果平台上换行则是使用 0a 或 0d 一个字节表示。

Unix/Linux/Mac系统下的文件在Windows里打开的话(使用Windows自带记事本),会出现换行丢失,所有文字会变成一行,整个文本会乱成一团。Windows系统下的文件在Unix/Linux/Mac里打开的话,在每行的结尾可能会多出一个^M符号。

目前大部分的编辑器和IDE都支持这几种换行符(除了notepad),但是跨平台协作项目源码到底保存为哪种风格的换行符呢?输出的文本需要保存为哪种风格的换行符呢?Git提供了一个解决方案——在跨平台协作场景时,会提供一个“换行符自动转换”的功能。

Git CRLF

Git默认在提交时将Windows换行符(CRLF)转换为LF,在拉取时将UNIX换行符(LF)替换成CRLF。我们可以通过设置autocrlf和safecrlf来设置具体的操作。

1、autocrlf

// 提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true

// 提交时转换为LF,检出时不转换
git config --global core.autocrlf input

// 提交检出均不转换
git config --global core.autocrlf false

2、safecrlf

// 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true

// 允许提交包含混合换行符的文件
git config --global core.safecrlf false

// 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
原文  http://JerkWisdom.github.io/utility/git/git-autocrlf/
正文到此结束
Loading...