关于行结尾
每次按键盘上的 return 时,会插入一个称为行结束符的不可见字符。 不同的操作系统处理行结束符的方式不同。
在使用 Git 和 GitHub Enterprise Server 协作处理项目时,Git 可能产生意外结果,例如,您在 Windows 计算机上操作,而您的协作者是在 macOS 中做的更改。
您可以将 Git 配置为自动处理行结束符,以便与使用不同操作系统的人员有效地协作。
行结束符的全局设置
git config core.autocrlf
命令用于更改 Git 处理行尾的方式。 它将采用单一参数。
在 macOS 上,只需将 input
� 递给配置即可。 例如:
$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for macOS
在 Windows 上,只需将 true
� 递给配置即可。 例如:
$ git config --global core.autocrlf true
# Configure Git to ensure line endings in files you checkout are correct for Windows.
# For compatibility, line endings are converted to Unix style when you commit files.
在 Linux 上,只需将 input
� 递给配置即可。 例如:
$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for Linux
按仓库设置
� 可以选择配置“.gitattribute”文件来管理 Git 读取特定存储库中的行结束符的方式。 将此文件提交到存储库时,它将覆盖所有存储库贡献者的 core.autocrlf
设置。 这可确保所有用户的行为一致,而不管其 Git 设置和环境如何。
“.gitattributes”文件必须在存储库的� �目录下创建,且像任何其他文件一� �提交。
“.gitattributes”文件看上去像一个两列表� �:
- 左侧是 Git 要匹配的文件名。
- 右侧是 Git 应对这些文件使用的行结束符配置。
示例
下面是一个“.gitattributes”示例文件。 您可以将其用作仓库的模板:
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
� 会注意到,文件是匹配的,即 *.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 中保存当前文件,以便不会丢失任何工作。
$ git add . -u $ git commit -m "Saving files before refreshing line endings"
- 添� 回所有已更改的文件,然后� �准化行结束符。
$ git add --renormalize .
- 显示已重写的� �准化文件。
$ git status
- 将更改提交到仓库。
$ git commit -m "Normalize all the line endings"
延伸阅读
- Pro Git 书籍中的自定义 Git - Git 属性
- Git 的手册页中的 git-config
- Pro Git 书籍中的入门 - 首次 Git 设置
- 由 Tim Clem 编写的注意行结尾