2

我正在使用 git-svn 将大型 SVN 存储库(约 28k 提交)转换为 Git。当这个过程完成时(~ 1 1/2 周),我遇到了一些 .ps1 文件在差异中被视为二进制文件。我已经在 master 上提交了一个 .gitignore 文件(当然是在转换之后),它告诉 git 将文件视为文本:

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

注意:-text 只是告诉它按原样处理行尾(不将它们与 Unix 行尾一起存储在其数据库中)

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

.gitattributes 在 Git-extensions 中对于以前的提交/差异并不完全有效,但这可能是我现在不想讨论的另一个问题。主要问题是存储在 git 中的二进制文件。

我在某处读到您可以在 .git/INFO 下存储 gitattributes。我可以在转换过程之前执行此操作,但我没有再尝试过,因为转换需要一个多星期的时间,我希望在第一次罢工时就做好。

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

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

编辑:问题不在于转换中的任何内容(git 故意将文件视为二进制文件),而是文件被“git diff”或 Git 扩展视为二进制文件。(见答案)当使用差异工具(例如 BeyondCompare)时,您仍然可以使用这些文件。在历史上只是有点烦人。由于文件按原样迁移,因此转换工作完美无缺。(即UTF-16)

4

1 回答 1

3

属性“ binarymacro”是-diff -merge -text(参见gitattributes docs)的简写。

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

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

如果是这种情况,您可以创建一个自定义的“差异驱动程序”,将文件转换为 UTF-8(就像在这个答案中提出的那样)。

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

于 2015-06-22T20:57:20.627 回答