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

问题描述:

所以,我可以从p4使用git-p4导入没有任何问题。一切似乎工作,但我的PNG文件(也许其他人)正在损坏。git-p4正在吃我的图像文件

我读过关于gitattributes和行结束问题,但我没有做任何事情似乎改变最终结果。破碎的图像。

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

任何想法?据我了解,git应该足够聪明,以便在没有这种帮助的情况下发现png是一个二进制文件。

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

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

+0

你在Windows上使用Git吗? – 2009-12-07 21:48:37

+0

是的,抱歉。这是Windows。 – 2009-12-07 21:58:09

+1

区分文件(预期和实际)。这将有助于确定这是否是cr/lf类型的问题,或者是否有其他事情正在发生。 – jdigital 2009-12-07 22:40:48

PNG文件格式有一个标题,专门用于寻找最终转换的程序,如果不是,则会导致失败。

PNG文件的8个字节是:89 50 4E 47 0D 0A 1A 0A,由于它们包含Unix换行符和Windows换行符 - 因此程序进行自动转换会自动使PNG失效。 PNG Signature rationale

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

+0

我同意 - 我没有走这条线昨晚思维。 我通过git-p4源文件挖掘并查看它如何将文件从Perforce中提取出来。 原来,它只是做一个p4打印//路径// // //文件#版本 所以,我在PNG文件上尝试了这一点,它们看起来很好。 (另外,检入的文件都很好,这些都不是新东西。) 我目前的猜测是流在Python脚本内部被读取和写入的方式正在造成某种损害。 (git-p4是一个python脚本)。 但是,我看不到任何其他地方的报道。让我觉得这是我的设置中的其他东西。 – 2009-12-08 14:38:36

这里有很多(很)漏泄的抽象层。

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

现在,在windows上,只有在窗口上,默认情况下git会自动破坏换行符。 (99%的git社区似乎讨厌这种默认设置,但它显然是windows上唯一明智的默认选项)。

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

我建议你先调查一下git的配置,因为windows的默认设置是完全不同的,而git的默认设置在一些版本和一些版本之间是不同的。 (也就是说,msysgit与cygwin不同 - cygwin的git有另一个层的换行符 - cygwin本身)。

享受。

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