不容易通过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
,您可以修复它们并提交结果。我建议在命令行上使用dos2unix
or 。fromdos
注意:该问题(错误 421364)刚刚(2014 年 3 月 25 日)被 Lars Vogel 重新认定为错误342372的副本。
因此,.gitattributes
JGit 的支持是“分配的”,但它的实现是仍在进行中.
正在审查实施(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
.