Git - 不同平台
Git - 处理跨平台的换行符
Section titled “Git - 处理跨平台的换行符”不同的操作系统在文本文件中使用不同的字符来标记一行的结束。类似 Unix 的系统(Linux、macOS)使用换行符(Line Feed,LF),而 Windows 传统上使用回车符后跟换行符(Carriage Return followed by a Line Feed,CRLF)。
这些差异可能导致版本控制中的问题。如果在 Windows 上编辑一个文件,然后在 Linux 上编辑它,Git 可能会因为换行符差异而将每一行都视为已更改,从而产生“嘈杂”的 diffs(差异)并导致不必要的 merge conflicts(合并冲突)。为了避免这种情况,Git 提供了配置换行符规范化的方法。
使用 core.autocrlf
Section titled “使用 core.autocrlf”core.autocrlf 配置设置告诉 Git 如何处理换行符。通常建议按用户进行设置。
对于 Windows 用户:
$ git config --global core.autocrlf true启用此设置后,当你 checkout(检出)文件时,Git 会将 LF 换行符转换为 CRLF。当你 commit(提交)文件时,CRLF 换行符会转换回 LF。这确保了在 Windows 上的 working directory(工作目录)中使用 CRLF,但在 repository(仓库)中使用 LF。
对于 Linux 或 macOS 用户:
$ git config --global core.autocrlf input启用此设置后,Git 会在 commit 时将 CRLF 换行符转换为 LF。文件在 checkout 时保持原样(保留 LF)。这确保了在 repository 中使用 LF。
通常不建议对跨平台项目设置 core.autocrlf false,因为它会禁用任何自动转换,可能导致 repository 中出现混合的换行符。
使用 .gitattributes 进行基于仓库的配置(最佳实践)
Section titled “使用 .gitattributes 进行基于仓库的配置(最佳实践)”一种更健壮且推荐的方法,尤其是对于团队项目,是在你的 repository 根目录下使用 .gitattributes 文件。这个文件允许按 repository 和按文件类型配置换行符,确保团队中每个成员的工作方式一致,无论他们的全局 core.autocrlf 设置是什么。
在你的 repository 根目录下创建一个名为 .gitattributes 的文件,对于大多数文本文件项目,内容如下:
# 设置所有文本文件的默认行为。* text=auto
# 明确声明你想要规范化的文本文件。*.c text*.h text*.java text*.py text*.js text*.html text*.css text*.md text
# 声明应始终使用 CRLF 换行符的文件(例如,Windows 批处理文件)。# *.bat text eol=crlf
# 声明应始终使用 LF 换行符的文件。# *.sh text eol=lf
# 标记二进制文件以防止 Git 更改它们。*.png binary*.jpg binary*.zip binary* text=auto 让 Git 决定如何处理文本文件的换行符。它通常会在 repository 中转换为 LF,并在 working directory 中使用本地系统的换行符。
特定的规则,如 *.c text,确保 C 文件被视为文本文件并进行规范化。如果需要,eol=lf 或 eol=crlf 可以强制使用特定的换行符。
将 .gitattributes 文件提交到你的 repository 中,这样这些设置就可以与所有协作者共享。这是在协作环境中管理换行符最可靠的方式。