git-p4正在吃我的图像文件

时间:2009-12-07 21:17:48

标签: git perforce git-p4

所以,我可以使用git-p4从p4导入而没有任何问题。一切似乎都有效,但我的PNG文件(或许还有其他文件)正在被破坏。

我已经阅读了关于gitattributes和行结束问题的内容,但我所做的一切似乎都没有改变最终结果。破碎的图像。

我的属性文件是: * .png二进制文件

有什么想法吗?据我了解,git应该足够聪明,可以发现png是一个没有这个帮助的二进制文件。

这与p4-git如何将文件从Perforce中拉出来有什么特别之处?

更新:这是在Windows上。我忘了这很重要。

3 个答案:

答案 0 :(得分:6)

PNG文件格式有一个标题,专门用于查找执行结束转换的程序,如果没有则会导致失败。

PNG文件的8个字节是:89 50 4E 47 0D 0A 1A 0A,特别选择因为它们包含Unix换行符和Windows换行符 - 因此执行自动转换的程序将自动使PNG无效。 PNG Signature rationale

所以这似乎确实是问题;而不是假设Git是问题,尝试从Perforce查看导入。 Perforce正在进行翻译,或者它最初是在损坏的状态下签入的,并且没有任何克隆/更新可以解决原始问题。

答案 1 :(得分:1)

这里有多层(非常)漏洞抽象。

首先,perforce服务器可能存储文件的内容。 其次,perforce客户端可能会破坏换行符。 第三,python脚本可能会破坏新行(不太可能)。 第四,git可能会破坏换行。

现在,在Windows上,只在Windows上,git默认会自动修改换行符。 (99%的git社区似乎讨厌这个默认设置,但它显然是Windows上唯一合理的默认选项。)

因此,如果您有换行“问题”,我建议您手动调查每一层,并准确指定您希望如何处理换行。我建议让它们明确,而不是自动。

我建议你首先调查git的配置,因为windows默认值是完全不同的,并且git的默认值在某些版本和某些版本之间有所不同。 (即,msysgit与cygwin不同 - cygwin的git有另一个换行符层 - cygwin本身。)

享受。

答案 2 :(得分:0)

确保您的PNG文件在Perforce中设置为“二进制”类型。我只是在Perforce中将随机二进制文件设置为“文本”类型时遇到此问题。我不确定为什么Perforce将该文件派生为文本,但是它导致了git-p4检测到该文件该怎么办的问题。