0

我在 Windows 上。我已将我的设置core.eolnative. 我已将我的设置core.autocrlffalse. 我很确定我从包含 CRLF 行结尾的文件开始,它们都是.clj,.md.gitignore. 我答应了他们。然后在下一次提交中,我提交了以下内容.gitattributes

* text=auto

*.bat text
*.bib text
*.clj text
*.java text
*.md text
*.tex text
*.txt text

*.jpg binary
*.pdf binary
*.png binary

在那个提交中,差异表示每个文件的每一行都发生了变化(我假设的行结尾)。

设置core.eol为 后native,我以为我会在工作树中获得 CRLF,但事实并非如此(仅适用于.gitattributes文件,没有其他文件,包括.gitignore)。我之前没有注意到,因为我使用的是 Vim。

我认为 gitattributes 提交的差异看起来很难看,所以我尝试为core.autocrlfand设置不同的值core.eol,例如将它们分别设置为trueand crlf,然后做git filter-branch --tree-filter HEAD. 我得到了错误error: core.autocrlf=input conflicts with core.eol=crlf。我检查git config --get core.autocrlf并返回true。那么为什么我会收到错误消息?

我很困惑。我想要的是我的工作树中的 CRLF 行结尾,并且提交不会改变我的行结尾,即从一开始就提交时它们是 LF,并保持这种状态。我怎样才能做到这一点?

4

2 回答 2

2

我也在Windows上。我使用 Git。我选择的编辑器是 Notepad2

通过此设置,我已将 Notepad2 中的默认行尾更改为LF. 如您 所见 ,我不必更改 Git EOL 设置。

现在,我的文件在本地和远程都使用LF,感觉简单而正确。

于 2013-07-06T05:41:22.827 回答
1

文件的第一行.gitattributes

* text=auto

基本上忽略您的设置core.autocrlf并为您的存储库的所有用户(包括您自己)打开行尾转换。

如果您不希望自动换行,则不应在.gitattributes文件中使用该设置。

有关更多详细信息,请参阅处理行尾gitattributes 手册页

于 2013-07-06T10:18:54.583 回答