不容易通过gitattributes,因为禁止负面模式。
实际上,这天(2013 年 3 月)提出了一个补丁来制作非致命的!pattern.gitattributes。
因此,您需要放置一个全局规则,例如*.txt仅在您知道不需要 CRLF.gitattributes的子目录中存在的文件中。
并在内容混合的目录中保留更细粒度的text规则。.gitattributes
kostmo在评论中提到了EGit 错误 421364:
在此实施之前,我推荐此设置:
- 对于每个 Eclipse 项目,转到
Properties > Resource并将“ New text file line delimiter”更改为Other: Unix. 提交生成的.settings/org.eclipse.core.runtime.prefs文件。
- 不要为 Git配置任何
.gitattributes或“ ”。
这意味着文件在工作目录中的行尾与存储库中的行尾相同。Git 和 EGit 不会转换任何文件内容。core.autocrlf
使用 1.,在 Eclipse 中创建的所有新文件都将具有正确的 ( LF) 行结尾,即使是由 Windows 上的用户创建的。
对于已经在您的存储库中的文件CRLF,您可以修复它们并提交结果。我建议在命令行上使用dos2unixor 。fromdos
注意:该问题(错误 421364)刚刚(2014 年 3 月 25 日)被 Lars Vogel 重新认定为错误342372的副本。
因此,.gitattributesJGit 的支持是“分配的”,但它的实现是仍在进行中.
正在审查实施(2015 年 1 月):
解析和处理.gitattributes文件的核心类,包括支持读取 WorkingTreeIterator 和 dirCacheIterator 中的属性。
将getAttributes特征添加到树行走。
属性的计算需要由 the 完成,TreeWalk因为它需要 aWorkingTreeIterator和 a DirCacheIterator。
2018 年 8 月更新:上面提到的错误(错误 342372)取决于刚刚解决的JGit 错误 537410 。
“ JGit rebase 和 stash 不保留行尾s”
问题是ResolveMerger期间processEntry()不记得CheckoutMetadata文件的(JGit 存储过滤器和 eol 属性),然后在checkout()忽略任何属性或过滤器的情况下检查它们。
ResolveMerger.cleanUp()有同样的问题。
JGit commit 4027c5c(来自评论 127290)应该可以解决这个问题。
感谢Thomas Wolf是 JGit的积极贡献者。
这给 EGit 带来了希望:
EGit 通常将所有这些 eol 处理留在暂存/合并/结帐给 JGit。
EGit 唯一需要关心的地方是在比较框架中,它必须自己读取索引条目,并且它已经正确处理了CheckoutMetadata.