SubGit 和 .gitattributes
SubGit and .gitattributes
我正在将 SVN 存储库导入 Git,并且我有很多文件设置了 svn:eol-style
。 SubGit 读取这些属性并为 每个 文件生成一个 .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 分支。
我正在将 SVN 存储库导入 Git,并且我有很多文件设置了 svn:eol-style
。 SubGit 读取这些属性并为 每个 文件生成一个 .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.
最后,在未来的版本中,我们(SubGit 团队)计划添加一种可能性来指定初始翻译的默认 *.java test eol=lf
规则,或者根据每个扩展的统计信息推断它,但现在您应该手动将此行添加到您使用的每个 Git 分支。