如何更改行尾设置


581

是否有文件或菜单可以让我更改如何处理行尾的设置?

我阅读了3种选择:

  1. 签出Windows风格,提交Unix风格

    签出文本文件时,Git会将LF转换为CRLF。提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Windows上的推荐设置(“ core.autocrlf”设置为“ true”)

  2. 按原样签出,以Unix样式提交

    签出文本文件时,Git不会执行任何转换。提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是在Unix上的建议设置(“ core.autocrlf”设置为“ input”)。

  3. 按原样签出,按原样提交

    当签出或提交文本文件时,Git不会执行任何转换。不建议跨平台项目选择此选项(“ core.autocrlf”设置为“ false”)



3
其中哪一个是默认设置?
斯蒂芬

2
没关系,看起来默认值是true,我认为这是适当的。
斯蒂芬

18
我实际上发现3rd选项效果更好。否则,当我在同一平台(Windows / Linux)上同时编辑批处理和sh脚本,然后提交它们,然后Git自动“修复”一个平台的行尾时,我经常会遇到这种情况……不,我更喜欢自我意识到行尾并按原样提交/签出它们。
JustAMartin

1
@Neutrino我希望这是对的,但是Visual Studio是一个会弄乱行尾的IDE(并且没有提供合理的配置选项将其关闭)的示例。
卡西奥·雷南

Answers:


527

正常的控制方法是 git config

例如

git config --global core.autocrlf true

有关详细信息,请在此链接中向下滚动到Pro Git到名为“ core.autocrlf”的部分。


如果您想知道此文件保存在哪个文件中,可以运行以下命令:

git config --global --edit

并且git global config文件应该在文本编辑器中打开,您可以看到该文件的加载位置。


17
truefalse只有两个选项,安装程序具有三个选项
qwertymk 2012年

49
input是第三个选项(如我提供的链接中所述)。3个选项是true| false| input
CodingWithSpike 2012年

2
下面是关于这个问题的另一个很好的SO问题:stackoverflow.com/questions/3206843/...
CodingWithSpike

31
实际上,如果您重新阅读自己的问题,请复制/粘贴摘录中的内容:"1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"这样,您基本上可以回答自己的问题了?:)
CodingWithSpike 2012年

2
这是解决它的老方法。查看.gitattributes文件。
eftshift0

176

OS中使用的行尾格式

  • Windows:(CR回车\r)和LF(LineFeed \n)对
  • OSX,Linux :(LFLineFeed \n

我们可以配置git以两种方式为每个操作系统自动更正行尾格式。

  1. Git全局配置
  2. 使用.gitattributes档案

全局配置

在Linux / OSX中
git config --global core.autocrlf input

这将解决任何CRLFLF当你提交。

在Windows中
git config --global core.autocrlf true

这样可以确保当您在Windows中结帐时,所有内容都LF将转换为CRLF

.gitattributes文件

保留.gitattributes文件是一个好主意,因为我们不希望团队中的每个人都设置他们的配置。该文件应保留在repo的根路径中,如果存在,则git将尊重它。

* text=auto

这会将所有文件视为文本文件,并转换为OS的行,该行在检出时结束,并LF在提交时自动返回。如果要明确告诉,则使用

* text eol=crlf
* text eol=lf

第一个用于签出,第二个用于提交。

*.jpg binary

.jpg不管路径如何,都将所有图像视为二进制文件。因此,无需转换。

或者,您可以添加路径限定符:

my_path/**/*.jpg binary

3
那么OS X,它CR单独使用(回车)呢?
jww

23
旧版MacOS(即MacOS 9和更早版本)CR单独使用,但OS X通常使用LF
Zachary Ware

2
我可以在Windows上使用* text eol=lf两次结帐LF吗?
mbomb007 '18

1
根据gitattributes的文档设置,* text=auto让git决定内容是否为文本。强制所有文件均为文本* text
阿德里安W

如何eol=cr在Mac OS 9和其他旧平台上设置文件?
NobleUplift

36

对于可以重新分发给所有开发人员的存储库设置解决方案,请查看.gitattributes文件中的text属性。这样,开发人员不必在存储库上手动设置自己的行尾,而且由于不同的存储库可以具有不同的行尾样式,因此至少在我看来,global core.autocrlf并不是最好的。

例如,在给定路径[上取消设置此属性-文本]将强制git在签入和签出时不接触行尾。我认为这是最好的做法,因为大多数现代文本编辑器都可以处理两种类型的行尾。同样,如果您作为开发人员仍希望在签入时进行行尾转换,则仍可以设置路径以匹配某些文件或在存储库中设置eol属性(在.gitattributes中)。

还请查看此相关文章,其中更详细地描述了.gitattributes文件和text属性:使用Git最好的CRLF(回车,换行)处理策略是什么?


. - textis not a valid attribute name: .gitattributes:1请放cat .gitattributes
jangorecki

3

对我来说,执行命令的诀窍是什么

git config auto.crlf false

在项目的文件夹中,我希望它专门用于一个项目。

该命令通过添加以下行来更改路径{project_name} /。git / config(fyi .git是一个隐藏文件夹)中的文件

[auto]
    crlf = false

在文件末尾。我想更改文件也能达到同样的效果。


1

如果要转换回已从PC格式更改为UNIX格式的文件格式。

(1)您需要重新安装乌龟GIT,并在“行尾转换”部分中确保选择了“按原样签出-按原样签入”选项。

(2)并保持其余配置不变。

(3)一旦安装完成

(4)将所有转换为UNIX格式的文件扩展名写入文本文件(extensions.txt)。

ex:*.dsp
   *.dsw

(5)将文件复制到您的克隆文件中在GITBASH中运行以下命令

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.