配置 Git 处理行结束符
为避免差异中出现问题,可配置 Git 正常处理行标题。
每次在键盘上按 return 时,实际会插入一个名为行结束符的不可见字符。 从历史上看,不同的操作系统处理行结束符的方式不同。
当您查看文件中的更改时,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
。 我们将查看以下一些可能的设置。
- `text=auto`
- Git 将以其认为最佳的方式处理文件。 这是一个合适的默认选项。
- `text eol=crlf`
- Git will always convert line endings to `CRLF` on checkout. You should use this for files that must keep `CRLF` endings, even on OSX or Linux.
- `text eol=lf`
- Git will always convert line endings to `LF` on checkout. 您应将其用于必须保持 LF 结束符的文件,即使在 Windows 上。
- `binary`
- Git 会理解指定文件不是文本,并且不应尝试更改这些文件。 The `binary` setting is also an alias for `-text -diff`.
-
在 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
在更改行结束符后刷新仓库
设置 core.autocrlf
选项和提交 .gitattributes 文件后,可能会发现 Git 希望您提交未修改的文件。 此时,Git 急需为您更改每个文件的行结束符。
The best way to automatically configure your repository's line endings is to first backup your files with Git, delete every file in your repository (except the .git directory), and then restore the files all at once.