Git 尽管 .gitattributes 搞乱了行尾
Git messing up line endings despite .gitattributes
我已经看到了 ,这是一个不同且非常奇怪的问题。我已经检查了我的 autocrlf 和 eol 配置,但它们没有设置
我在 Mac。在我们的存储库中,我们有一个 .gitattributes 文件,如下所示:
*.sql text eol=lf
*.sh text eol=lf
这对 .sql 文件非常有效。但是我们有一个名为 scripts/some-version.SQL
的文件。它以 Unix lf 结尾签入。当我在 OS X 上检查它时,该文件立即转换为 dos crlf 结尾并标记为已更改。在 Windows 上检查相同的文件会给出 Unix lf 结尾。
如果我注释掉 .gitattributes 文件中的 .sql
行,我将停止将 .SQL 文件签出为 crlf。导致此行为的是 .gitattributes。然而,Windows 用户会不小心再次开始签入 crlf 结尾。遗憾的是,更改文件名不是一个选项。
我尝试向 .gitattributes 添加 .SQL text eol=lf
行,但这没有帮助。
我们如何才能为 Windows 用户提供 .gitattributes 而不会弄乱 OS X 上此文件的行尾?
根据要求。该问题的演示,以及 check-attr
.
macbookpro:postgres btilly$ git checkout scripts/
Updated 1 path from the index
macbookpro:postgres btilly$ git status scripts/3.20.08-UPDATE.SQL
On branch integration
Your branch is up to date with 'origin/integration'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: scripts/3.20.08-UPDATE.SQL
no changes added to commit (use "git add" and/or "git commit -a")
macbookpro:postgres btilly$ git check-attr -a scripts/3.20.08-UPDATE.SQL
scripts/3.20.08-UPDATE.SQL: text: set
scripts/3.20.08-UPDATE.SQL: eol: lf
macbookpro:postgres btilly$ file scripts/3.20.08-UPDATE.SQL
scripts/3.20.08-UPDATE.SQL: UTF-8 Unicode text, with very long lines, with CRLF line terminators
很可能您的文件已使用 CRLF 行结尾签入,至少在某些地方是这样。令人们惊讶的是,编辑 .gitattributes
不会影响任何已签入存储库的文件,也不会影响工作树中的干净文件。
基本上,无论何时您对 .gitattributes
进行更改,您都需要 运行 git add --renormalize .
并提交这些更改。否则,您最终可能会处于不一致的状态。
另请注意,您的 .gitattributes
模式不适用于区分大小写的系统,因为您的模式使用小写 *.sql
而您的文件使用大写 .SQL
。所以你可能还想添加这个:
*.SQL text eol=lf
当然,您需要在 运行宁 git add --renormalize .
之前完成。
我已经看到了
我在 Mac。在我们的存储库中,我们有一个 .gitattributes 文件,如下所示:
*.sql text eol=lf
*.sh text eol=lf
这对 .sql 文件非常有效。但是我们有一个名为 scripts/some-version.SQL
的文件。它以 Unix lf 结尾签入。当我在 OS X 上检查它时,该文件立即转换为 dos crlf 结尾并标记为已更改。在 Windows 上检查相同的文件会给出 Unix lf 结尾。
如果我注释掉 .gitattributes 文件中的 .sql
行,我将停止将 .SQL 文件签出为 crlf。导致此行为的是 .gitattributes。然而,Windows 用户会不小心再次开始签入 crlf 结尾。遗憾的是,更改文件名不是一个选项。
我尝试向 .gitattributes 添加 .SQL text eol=lf
行,但这没有帮助。
我们如何才能为 Windows 用户提供 .gitattributes 而不会弄乱 OS X 上此文件的行尾?
根据要求。该问题的演示,以及 check-attr
.
macbookpro:postgres btilly$ git checkout scripts/
Updated 1 path from the index
macbookpro:postgres btilly$ git status scripts/3.20.08-UPDATE.SQL
On branch integration
Your branch is up to date with 'origin/integration'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: scripts/3.20.08-UPDATE.SQL
no changes added to commit (use "git add" and/or "git commit -a")
macbookpro:postgres btilly$ git check-attr -a scripts/3.20.08-UPDATE.SQL
scripts/3.20.08-UPDATE.SQL: text: set
scripts/3.20.08-UPDATE.SQL: eol: lf
macbookpro:postgres btilly$ file scripts/3.20.08-UPDATE.SQL
scripts/3.20.08-UPDATE.SQL: UTF-8 Unicode text, with very long lines, with CRLF line terminators
很可能您的文件已使用 CRLF 行结尾签入,至少在某些地方是这样。令人们惊讶的是,编辑 .gitattributes
不会影响任何已签入存储库的文件,也不会影响工作树中的干净文件。
基本上,无论何时您对 .gitattributes
进行更改,您都需要 运行 git add --renormalize .
并提交这些更改。否则,您最终可能会处于不一致的状态。
另请注意,您的 .gitattributes
模式不适用于区分大小写的系统,因为您的模式使用小写 *.sql
而您的文件使用大写 .SQL
。所以你可能还想添加这个:
*.SQL text eol=lf
当然,您需要在 运行宁 git add --renormalize .
之前完成。