如何更改行尾设置

Posted

技术标签:

【中文标题】如何更改行尾设置【英文标题】:How to change line-ending settings 【发布时间】:2012-05-12 05:39:40 【问题描述】:

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

我读到有 3 个选项:

    签出 Windows 风格,提交 Unix 风格

    Git 在检出文本文件时会将 LF 转换为 CRLF。什么时候 提交文本文件,CRLF 将被转换为 LF。为了 跨平台项目,这是 Windows 上的推荐设置 (“core.autocrlf”设置为“true”)

    按原样结帐,提交 Unix 风格

    Git 在检出文本文件时不会执行任何转换。 提交文本文件时,CRLF 将转换为 LF。为了 跨平台项目这是 Unix 上的推荐设置 (“core.autocrlf”设置为“输入”)。

    按原样结帐,按原样提交

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

【问题讨论】:

How do I force git to use LF instead of CR+LF under windows? 的可能重复项 以下哪个是默认的? 我实际上发现第三个选项效果更好。否则,我经常会在同一平台(Windows/Linux)上同时编辑批处理和 sh 脚本,然后提交它们,Git 会自动“修复”一个平台的行尾......不,我更喜欢自我意识到行尾并按原样提交/签出它们。 同意@JustAMartin 让系统弄乱你的行尾是引入错误的好方法,这些错误需要一整天的时间来追踪和修复,就像我刚才所做的那样。现在 Windows 上所有体面的编辑器和 IDE 现在都完全支持 LF 行尾,不需要这种翻译。 @Neutrino 我希望这是真的,但一个与行尾混淆的 IDE 示例(并且没有提供合理的配置选项来关闭它)是 Visual Studio。 【参考方案1】:

控制这个的正常方法是使用git config

例如

git config --global core.autocrlf true

如需了解详情,请在this link to Pro Git 中向下滚动至名为“core.autocrlf”的部分


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

git config --global --edit

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

【讨论】:

input 是第三个选项(如我提供的链接中所述)。三个选项是true | false | input 这是关于该主题的另一个很好的 SO 问题:***.com/questions/3206843/… 实际上,如果您重新阅读自己的问题,在复制/粘贴的摘录中:"1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")" 所以您基本上回答了自己的问题? :) Pro git 已经被 git-scm 吸收了。 git-scm 书的等效链接是formatting and whitespace configuration section。 这是绕过它的老方法。查看 .gitattributes 文件。【参考方案2】:

操作系统中使用的行结束格式:

Windows:CR(回车\r)和LF(换行\n)对 OSX、Linux:LF (LineFeed \n)

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

    Git 全局配置 使用.gitattributes文件

全局配置

在 Linux/OSX 中

git config --global core.autocrlf input

这将在您提交时将任何 CRLF 修复为 LF

在 Windows 中

git config --global core.autocrlf true

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

.git 属性文件

保留.gitattributes 文件是个好主意,因为我们不希望团队中的每个人都设置自己的配置。此文件应放置在存储库根目录中。如果存在,git 会尊重它。

* text=auto

这会将所有文件视为文本文件,并在结帐时自动转换为操作系统的行,并在提交时自动转换回LF。如果要明确指定行尾,可以使用:

* text eol=crlf
* text eol=lf

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

*.jpg binary

这会将所有.jpg 图像视为二进制文件,无论路径如何。所以不需要转换。

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

my_path/**/*.jpg binary

【讨论】:

单独使用CR(回车)的OS X呢? 旧版 MacOS(即 MacOS 9 及更早版本)单独使用 CR,但 OS X 通常使用 LF 我可以使用* text eol=lf 两次在Windows 上使用LF 结帐吗? 根据gitattributes documentation设置* text=auto让git决定内容是否为文本。强制所有文件为文本应该是 * text only。 其中哪些是关闭的 - 不理会我的文件 - 我的文件我的行尾 - 不要改变任何东西?【参考方案3】:

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

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

还可以查看这篇相关文章,其中更详细地描述了 .gitattributes 文件和文本属性:What's the best CRLF (carriage return, line feed) handling strategy with Git?

【讨论】:

. - textis not a valid attribute name: .gitattributes:1 请输入cat .gitattributes【参考方案4】:

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

git config auto.crlf false

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

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

[auto]
    crlf = false

在文件末尾。我想更改文件也有同样的作用。

【讨论】:

【参考方案5】:

.gitattributes 文件

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

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

*           text=auto     # auto
*.txt       text
*.vcproj    text eol=crlf # windows line-endings
*.sh        text eol=lf   # linux line-endings
*.jpg       -text

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

【讨论】:

【参考方案6】:

如果您想将已经从 PC 格式更改为 UNIX 格式的文件格式转换回。

(1)您需要重新安装tortoise 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

【讨论】:

【参考方案7】:

以下步骤对我有用

在根项目文件夹上添加一个 git 属性(这将对即将发布的文件有用)

* text=auto

*.tf  eol=lf
*.tfvars  eol=lf
*.yml  eol=lf

执行以下命令后,支持已存在的文件

find ./ -type f \( -iname \*.tf -o -iname \*.tfvars -o -iname \*.md -o -iname \*.yml \) -print0 | xargs -0 dos2unix

dos2unix .gitignore
dos2unix .gitattributes

【讨论】:

以上是关于如何更改行尾设置的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:如何通过 UILabel 内容高度更改行高

PL SQL XMLDOM 更改行结束

请教大家:使用sdwebimage下载图片完成后更新cell中的imageview如何动态更改行高

QTableWidget - 更改行颜色

根据列中的文本更改行颜色

内容类型列表中的 Drupal 更改行权重