如何告诉git-svn文件不是二进制文件

时间:2015-06-22 09:32:09

标签: git svn migration git-svn gitattributes

我正在使用git-svn将大型SVN-repo(~28k Commits)转换为Git。 当过程结束(〜1 1/2周)时,我遇到了一些在差异中被视为二进制文件的.ps1文件。 我已经在master上提交了一个.gitignore文件(在转换之后),告诉git将文件视为文本:

* -text
*.snk binary
*.ico binary
*.chm binary
and so on...

注意:-text只是告诉它按原样处理行结尾(不在它的数据库中用Unix行结尾存储它们)

但是我只能在转换后添加.gitattributes。

.gitattributes在以前的提交/差异的Git扩展中不太合适,但这可能是我现在不想讨论的另一个问题。主要问题是在git中存储二进制文件。

我在某处读到了你可以在.git / INFO下存储一个gitattributes。我可以在转换过程之前做到这一点,但由于转换需要一周多的时间,我还没有给出另一个尝试,我想在第一次攻击时做到正确。

所以基本上我的问题现在如下: 记住转换后的存储库:我可以将现有git存储库中的现有二进制文件转换为文本文件吗?

如果没有:我如何告诉git-svn在整个转换过程中使用gitattributes将哪些文件视为文本/二进制文件?

编辑: 问题不在于转换(git将文件视为二进制文件),而是通过' git diff'将文件视为二进制文件。或Git扩展。 (见答案) 使用diff工具(例如BeyondCompare)时,您仍然可以使用这些文件。这在历史上只是有点烦人。由于文件是按原样迁移的,因此转换完美无瑕。 (UTF-16)

1 个答案:

答案 0 :(得分:3)

binary属性"宏"是-diff -merge -text的简写(参见gitattributes docs)。

text - 属性相反,该属性影响存储库与工作副本版本之间文件的行结束转换,diffmerge - 属性不会影响Git存储文件。后两个属性只影响Git 解释文件内容的方式(例如Git如何为文件创建diff / patch)。

如果.ps1 binary中没有明确的.ps1 -diff.gitattributesgit diff.ps1文件解释为二进制文件的原因可能是因为他们的编码。请注意,例如,Git不支持UTF-16 / UCS-2。

如果是这种情况,您可以创建自定义"差异驱动程序"它将文件转换为UTF-8(如this answer中提出的那样)。

或者,由于Windows PowerShell也可以处理UTF-8脚本文件,因此您可以将所有.ps1文件转换为UTF-8。 (如果要转换现有/迁移提交中的文件,可以使用git-filter-branch。)