SubGit 和 .gitattributes

SubGit and .gitattributes

我正在将 SVN 存储库导入 Git,并且我有很多文件设置了 svn:eol-styleSubGit 读取这些属性并为 每个 文件生成一个 .gitattributes 行。

有没有办法告诉它对每种类型的文件使用单行(即 *.java text*.java text eol=lf,因为我们有一个强制要求的样式指南规则)?

我试图在导入之前将 info/attributes 添加到存储库,但生成的 .gitattributes.

没有任何变化

有办法吗?

目前无法为初始翻译定义 *.java test eol=lf 等默认规则,但如果您稍后在 Git 分支中更改 .gitattributes 以替换所有文件行使用一个 *.java test eol=lf 规则,所有具有 svn:eol-style=LF 的后续 Java 文件不会导致换行,但是 Java 具有其他 svn:eol- 的文件样式值将导致额外的行作为 *.java test eol=lf 规则的例外。

此外,甚至建议使用 *.java test eol=lf 规则,因为当您在 Git 中创建 Java 文件时,.gitattributes 规则会隐式应用于它,因此,您新创建的 Java 文件将自动具有 "eol=lf",当您将其推送到 Git 时,SubGit 会将其转换为 svn:eol-style=LF。因此,此规则的作用与 SVN 自动属性相同。

SubGit 根本不考虑 info/attributes 文件,因为它没有版本控制并且只存在于本地机器上,而 SubGit 在服务器端级别工作。但是你可以在本地机器上使用 info/attributes 来覆盖 .gitattributes 如果你只需要在一台机器上使用它。

我还要注意,更改 .gitattributes 文件时应小心。当您将此类更改推送到 SVN 时,它将更新 svn:eol-style 为所有更改了有效 "eol" 属性值的文件。

还有一点要注意:当您为具有混合 EOL 的文件设置 "eol" 属性时要小心:首先在 Git blob 级别将其 EOL 更改为 LF,或者(哪个更容易) 在 SVN 端设置 svn:eol-style 属性,因为当你设置这个 属性 时,Subversion 会自动修复文件内容,但 Git 不会那样做。

您提到了两种模式,*.java text*.java text eol=lf,但它们实际上是不同的。第一个是默认 * text=auto !eol 规则的特殊情况,除非 Java 文件包含二进制字符(因为它不包含 "eol" 属性,主要 *-rule 将设置它到 !eol,对应于 svn:eol-style=native);所以添加时会被忽略。第二个将为添加到 Git.

的每个 Java 文件设置 svn:eol-style=LF

最后,在未来的版本中,我们(SubGit 团队)计划添加一种可能性来指定初始翻译的默认 *.java test eol=lf 规则,或者根据每个扩展的统计信息推断它,但现在您应该手动将此行添加到您使用的每个 Git 分支。