配置 Git 处理行尾
配置 Git 处理行结束符¶
原文链接:https://docs.github.com/en/get-started/git-basics/configuring-git-to-handle-line-endings
为避免在差异比较中出现问题,你可以配置 Git 以正确处理行结束符。
关于行结束符¶
每次在键盘上按下回车键时,都会插入一个称为行结束符的不可见字符。不同的操作系统处理行结束符的方式不同。
当你使用 Git 和 GitHub 协作开发项目时,如果例如你在 Windows 机器上工作,而你的协作者在 macOS 上进行了修改,Git 可能会产生意外的结果。
你可以配置 Git 自动处理行结束符,以便与使用不同操作系统的人员有效协作。
行结束符的全局设置¶
git config core.autocrlf 命令用于更改 Git 处理行结束符的方式。它接受单个参数。
在 Windows 上,你只需将 true 传递给配置。例如:
1 2 3 | |
在 macOS 上,您只需将 input 传递给配置。例如:
1 2 | |
在 Linux 上,您只需将 input 传递给配置。例如:
1 2 | |
仓库级别设置¶
可选地,你可以配置一个 .gitattributes 文件来管理 Git 如何在特定仓库中读取行结束符。当你将此文件提交到仓库时,它会覆盖所有仓库贡献者的 core.autocrlf 设置。这确保了所有用户的一致行为,无论他们的 Git 设置和环境如何。
.gitattributes 文件必须在仓库的根目录中创建,并像任何其他文件一样提交。
.gitattributes 文件看起来像一个包含两列的表格:
- 左侧是 Git 需要匹配的文件名
- 右侧是 Git 应该为这些文件使用的行结束符配置
示例¶
下面是一个 .gitattributes 文件的示例。你可以将其用作你仓库的模板:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
你会注意到文件被匹配—*.c、*.sln、*.png—,用空格分隔,然后给出一个设置—text、text eol=crlf、binary。下面我们将介绍一些可能的设置。
text=auto:Git 会以它认为最佳的方式处理文件。这是一个很好的默认选项。text eol=crlf:Git 在检出时总是将行结束符转换为CRLF。你应该对那些必须保持CRLF结束符的文件(即使在 OSX 或 Linux 上)使用此设置。text eol=lf:Git 在检出时总是将行结束符转换为LF。你应该对那些必须保持 LF 结束符的文件(即使在 Windows 上)使用此设置。binary:Git 会理解指定的文件不是文本文件,不应该尝试更改它们。binary设置也是-text -diff的别名。
更改换行符后刷新仓库¶
在设置 core.autocrlf 选项或提交 .gitattributes 文件后,Git 会自动更改行结束符以匹配你的新配置。你可能会发现 Git 报告了你未修改的文件发生了变化。
为确保仓库中的所有行结束符都符合你的新配置,使用 Git 备份你的文件,然后删除并恢复所有文件以规范化行结束符。
在添加或提交任何更改之前,请验证 Git 是否正确应用了配置。例如,Git 会自动确定仓库中的文件是文本文件还是二进制文件。为避免仓库中二进制文件的损坏,我们建议你在 .gitattributes 中明确将文件标记为二进制文件。更多信息,请参阅 Git 文档中的 gitattributes - 按路径定义属性。
为避免丢失仓库中文件的任何本地更改,请通过运行以下命令添加并提交所有未完成的更改:
1 2 | |
要更新当前分支上的所有文件以反映新配置,请运行以下命令:
1 | |
要显示重写并规范化的文件,运行以下命令:
1 | |
(可选)要提交仓库中任何未完成的更改,请运行以下命令:
1 | |
进一步阅读¶
- 自定义 Git - Git 属性(《Pro Git》书籍中)
- git-config(Git 的手册页中)
- 入门 - 首次 Git 设置(《Pro Git》书籍中)
- 注意你的行结束符,作者 Tim Clem