我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们
文章版本: GitHub.com

配置 Git 处理行结束符

为避免差异中出现问题,可配置 Git 正常处理行标题。

每次在键盘上按 return 时,实际会插入一个名为行结束符的不可见字符。 从历史上看,不同的操作系统处理行结束符的方式不同。

当您查看文件中的更改时,Git 会以自己的方式处理行结束符。 由于您正在使用 Git 和 GitHub 协作处理项目,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 文件看上去像一个两列表格。

示例

以下是 .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
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 目录),然后一次性恢复文件。

  1. 在 Git 中保存当前文件,以便不会丢失任何工作。

    $ git add . -u
    $ git commit -m "Saving files before refreshing line endings"
  2. 添加回所有已更改的文件,然后标准化行结束符。

    $ git add --renormalize
  3. 显示已重写的标准化文件。

    $ git status
  4. 将更改提交到仓库。

    $ git commit -m "Normalize all the line endings"

延伸阅读

问问别人

找不到要找的内容?

联系我们