如何更改行结束设置

qwe*_*ymk 510 git msysgit

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

有3种选择:

  1. 结帐Windows风格,提交Unix风格

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

  2. Checkout as-is,提交Unix风格

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

  3. 按原样结帐,按原样提交

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

Cod*_*ike 468

控制它的正常方法是 git config

例如

git config --global core.autocrlf true
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请在此链接中向下滚动到Pro Git,名为"core.autocrlf"


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

git config --global --edit
Run Code Online (Sandbox Code Playgroud)

并且git全局配置文件应该在文本编辑器中打开,您可以看到该文件的加载位置.

  • `input`是第3个选项(如我提供的链接中所述).3个选项是'true` | `false` | `input` (42认同)
  • 其实,如果你重新阅读你自己的问题,在复制/粘贴摘录:`"1 ...(" core.autocrlf"设置为'真’)... 2 ...('core.autocrlf’设置为"输入")... 3 ...("core.autocrlf"设置为"false")"`所以你基本上回答了你自己的问题?:) (27认同)
  • `true`或`false`只有两个选项,安装程序有三个 (13认同)
  • 这是解决这个问题的老方法。查看 .gitattributes 文件。 (3认同)
  • 应该注意的是,更改此设置后,它有助于“git rm --cached -r .”,然后“git reset --hard”,以便重写工作树中的所有文件。这样做您将丢失未提交的更改! (3认同)
  • 这是关于该主题的另一个很好的SO问题:http://stackoverflow.com/questions/3206843/how-line-ending-conversions-work-with-git-core-autocrlf-between-different-operat (2认同)
  • Pro git 已被 git-scm 吸收。git-scm 书的等效链接是[格式和空白配置部分](http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Formatting-and-Whitespace)。 (2认同)

Jas*_*nan 150

OS中使用的行结束格式

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

我们可以通过两种方式配置git以自动纠正每个操作系统的行结束格式.

  1. Git Global配置
  2. 使用.gitattributes文件

全局配置

在Linux/OSX中
git config --global core.autocrlf input
Run Code Online (Sandbox Code Playgroud)

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

在Windows中
git config --global core.autocrlf true
Run Code Online (Sandbox Code Playgroud)

这将确保您在Windows中结帐时,所有LF将转换为CRLF

.gitattributes文件

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

* text=auto
Run Code Online (Sandbox Code Playgroud)

这会将所有文件视为文本文件,并转换为以结帐时结束的操作系统行,并LF自动返回到提交.如果想明确告诉,那就用吧

* text eol=crlf
* text eol=lf
Run Code Online (Sandbox Code Playgroud)

第一个用于结账,第二个用于提交.

*.jpg binary
Run Code Online (Sandbox Code Playgroud)

将所有.jpg图像视为二进制文件.所以不需要转换

  • Legacy MacOS(即MacOS 9及更早版本)单独使用`CR`,但OS X通常使用`LF`. (20认同)
  • 根据 [gitattributes 文档](https://git-scm.com/docs/gitattributes#Documentation/gitattributes.txt-Settostringvalueauto) 设置 `* text=auto` 让 git 决定内容是否是文本。强制所有文件为文本应该只是“*文本”。 (4认同)
  • OS X怎么样,单独使用`CR`(回车)? (3认同)
  • “第一个用于结帐,第二个用于提交。”您确定吗?我没有看到任何文档支持这一点 (3认同)
  • 我可以在Windows上使用两次*文本eol = lf来用LF结帐吗? (2认同)

Faz*_*azi 31

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

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

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


Ben*_*ing 19

.gitattributes 文件

最简单的方法是使用.gitattributes存储库中的本地文件。

您还可以更改特定文件扩展名的行结尾

*           text=auto     # auto
*.txt       text
*.vcproj    text eol=crlf # windows line-endings
*.sh        text eol=lf   # linux line-endings
*.jpg       -text
Run Code Online (Sandbox Code Playgroud)

这也覆盖了全局默认值,因此它更加便携,并使存储库在不同的机器上更加可靠。

  • 您必须删除行尾的注释,以防止结帐期间出现 `# is not a valid attribute name: .gitattributes:1` 错误 (6认同)

Jim*_*Jim 8

对于 Windows 中的“按原样签出,按原样提交”选项:

git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)

这根本不会修改行结尾。


Tra*_*ast 7

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

git config auto.crlf false
Run Code Online (Sandbox Code Playgroud)

在项目的文件夹内,我想要它专门用于一个项目。

该命令通过添加行更改了路径 {project_name}/.git/config (仅供参考 .git 是一个隐藏文件夹)中的文件

[auto]
    crlf = false
Run Code Online (Sandbox Code Playgroud)

在文件的末尾。我想更改文件也有同样的技巧。