2014-09-27 41 views
11

我想在我的.gitattributes文件中使用eol=LF,但我希望它将仅适用于文件Git自动确定为文本文件。使用.gitattributes强制LF行结束而不会丢失自动文本/二进制推断?

我能找到的最好的方法是将特定文件扩展名/球体定义为文本或二进制文件。这并不理想,因为名单可能很大。我试过* text=auto eol=LF,但eol=LF部分似乎覆盖了auto部分。

我可以强制LF行结束而不需要特定的git config设置,并且不会丢失自动文本/二进制推断吗?

回答

5

更新:后@romkyns评论我重新检查了一切,发现我的解决方案稍微不正确。正确的将是一个.gitattributes -file具有以下内容:

* text=auto 

按照documentation这确保了Git认为是文本所有文件将已恢复正常的存储库(LF)行结尾。


原来的答案:

要在.gitattributes写什么是这样简单:

* text=auto 
* text eol=lf 

第一行告诉git的自动检测文件类型(二进制或文本,这是git的默认行为,因此可能会被忽略),第二行处理所有检测到的文本文件(仅限于那些)的行结尾,并带有LF行尾。

我测试此设置与一些混合二进制内容和一些文本文件与CRLF结束,得到了预期的转换,以LF结束。

+1

为什么没有第二行让一切'text'?我很惊讶,这不,[文件](http://git-scm.com/docs/gitattributes),使它看起来像'* text'部分_“标志着路径为文本文件” _。另外,我想这将覆盖任何混帐配置设置,将这种情况发生,即使我省略了第一行像你建议? – 2015-11-24 12:20:54

+0

你完全正确 - 毕竟找到了解决方案。第一条线足以满足你的要求。至于你的其他问题,库设置将覆盖用户设置,这些设置覆盖系统设置:看到https://git-scm.com/book/tr/v2/Customizing-Git-Git-Configuration#_git_config – Lars 2015-11-24 20:48:30

+0

我想我们将会用'* text = auto'去。我不知道一个如何可能指定文本=汽车,同时还指定EOL选项,其中必要的,但我知道,我没有问,在我原来的问题。 – 2015-11-29 15:22:42

3

我建议三种解决方案:

方法1
我认为大部分的工作目录中的文件是文本文件。因此,为每个文本文件类型添加特定行会浪费大量时间。

您可以unset text属性binary文件.gitattributes文件。由于只有几种binary文件类型,因此这样做并不繁琐。

方法2
我觉得你的关键问题是禁用全局eol=lf设置。根据.gitattributes的优先顺序,您可以在$GIT_DIR/info/attributes中配置具有最高优先级的text=auto。同时,它只影响工作树。

方法3 完全从您的工作树中删除.gitattributes。取决于您的文件编辑器进行行尾转换。我建议Notepad ++在Unix风格和Windows风格之间进行EOL转换时非常方便。

1

Repositery水平Git属性: (Where should I place my global 'gitattributes' file?

- 创建文件的.git /信息在它/属性: *文字=自动

- 对于每一个修改过的文件,在做的时候添加的git *您现在应该警告 “的文件将在您的工作目录原来的行尾”

相关问题