关于行结尾的完全混淆

时间:2013-07-06 04:16:11

标签: git

我在Windows上。我已将core.eol设置为native。我已将core.autocrlf设置为false。我很确定我开始使用包含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

在该提交中,diff表示每个文件的每一行都改变了(我假设的行结尾)。

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

我认为gitattributes提交的差异看起来很难看,所以我尝试为core.autocrlfcore.eol设置不同的值,例如分别设置为truecrlf并且正在做git filter-branch --tree-filter HEAD。我收到错误error: core.autocrlf=input conflicts with core.eol=crlf。我使用git config --get core.autocrlf进行了检查,并返回了true。那么为什么我会收到错误?

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

2 个答案:

答案 0 :(得分:2)

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

通过此设置,我将Notepad2中的默认行结尾更改为LF。就像你一样 can see 我没有必要改变Git EOL设置。

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

答案 1 :(得分:1)

.gitattributes文件的第一行:

* text=auto

基本上忽略了core.autocrlf的设置,并为您的存储库的所有用户(包括您自己)启用了行结束转换。

如果您不想进行自动行结束转换,则不应在.gitattributes文件中使用该设置。

有关详细信息,请参阅Dealing with line endingsgitattributes Manual Page