Configuring Git to handle line endings
To avoid problems in your diffs, you can configure Git to properly handle line endings.
Every time you press return on your keyboard you're actually inserting an invisible character called a line ending. 从历史上看,不同的操作系统处理行结束符的方式不同。
当您查看文件中的更改时,Git 会以自己的方式处理行结束符。 由于您正在使用 Git 和 GitHub Enterprise 协作处理项目,Git 可能产生意外结果,例如,您正在 Windows 机器上工作,而您的协作者在 OS X 中进行了更改。
行结束符的全局设置
git config core.autocrlf
命令用于更改 Git 处理行结束符的方式。 它将采用单一参数。
在 OS X 上,只需将 input(输入)
传递给配置。 例如:
$ git config --global core.autocrlf input
# 在 OS X 上配置 Git 以正确处理行结束符
在 Windows 上,只需将 true(真)
传递给配置。 例如:
$ git config --global core.autocrlf true
# 在 Windows 上配置 Git 以正确处理行结束符
在 Linux 上,只需将 input(输入)
传递给配置。 例如:
$ git config --global core.autocrlf input
# 在 Linux 上配置 Git 以正确处理行结束符
在 OS X 和 Linux 上,通常需要传递 input(输入)
以进行此设置。 在 Windows 上, 通常需要使用 true(真)
。 例如:
$ git config --global core.autocrlf input
# 在 OS X 或 Linux 上配置 Git 以正确处理行结束符
$ git config --global core.autocrlf true
# 在 Windows 配置 Git 以正确处理行结束符
按仓库设置
可选择通过配置特殊 .gitattributes 文件,配置 Git 按仓库管理行结束符。 提交文件到仓库,然后覆盖个别 core.autocrlf
设置,确保所有用户的行为一致,无论其 Git 设置如何。 .gitattributes 文件的优势是行配置与仓库关联。 您无需担心协作者是否采用了相同的行结束符设置。
.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
。 我们将查看以下一些可能的设置。
<
dl>
text=auto
text eol=crlf
CRLF
。 您应将其用于必须保持 CRLF
结束符的文件,即使在 OSX 或 Linux 上。
text eol=lf
LF
。 您应将其用于必须保持 LF 结束符的文件,即使在 Windows 上。binary
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-config(1) Manual Page”(手册页面)
- Pro Git 书籍中的“Getting Started - First-Time Git Setup”(入门 - 首次 Git 设置)
- “Mind the End of Your Line”(注意行的结束)- Git 中行结束符的完整说明,作者:Tim Clem