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

git-p4正在吃掉我的图像文件,git,perforce,git-p4,Git,Perforce,Git P4,因此,我可以使用git-p4从p4导入,没有任何问题。一切似乎都正常,但我的PNG文件(可能还有其他文件)正在损坏 我读过gitattributes和行尾问题,但我所做的一切似乎都没有改变最终结果。破碎的图像 我的属性文件是: *.png二进制文件 有什么想法吗?据我所知,git应该足够聪明,能够在没有这个帮助的情况下发现png是一个二进制文件 这与p4git如何从Perforce中提取文件有关吗 更新:这是在Windows上。我忘了这一点很重要。PNG文件格式有一个头,专门设计用于查找进行结束

因此,我可以使用git-p4从p4导入,没有任何问题。一切似乎都正常,但我的PNG文件(可能还有其他文件)正在损坏

我读过gitattributes和行尾问题,但我所做的一切似乎都没有改变最终结果。破碎的图像

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

有什么想法吗?据我所知,git应该足够聪明,能够在没有这个帮助的情况下发现png是一个二进制文件

这与p4git如何从Perforce中提取文件有关吗


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

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

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


看来这才是问题所在,;不要假设Git是问题所在,而是尝试从Perforce导入。Perforce正在进行翻译,或者它最初是在损坏状态下签入的,再多的克隆/更新也无法修复原始问题。

这里有多层(非常)泄漏的抽象

首先,perforce服务器可能将文件存储为什么。 第二,perforce客户端可能会破坏新行。 第三,python脚本可能会弄乱新行(不太可能)。 第四,git可能会破坏新线

现在,在windows上,并且仅在windows上,git将在默认情况下自动损坏换行符。 (99%的git社区似乎讨厌这种默认设置,但它显然是windows上唯一合理的默认设置)

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

我建议您首先研究一下git的配置,因为windows默认设置非常不同,而且git的默认设置在某些版本和某些版本之间有所不同。(也就是说,msysgit与cygwin不同——cygwin的git有另一层换行符——cygwin本身)


享受。

确保您的PNG文件在Perforce中设置为“二进制”类型。我刚刚遇到了一个问题,在Perforce中将随机二进制文件设置为“text”类型。我不知道为什么Perforce将该文件派生为文本,但这导致git-p4检测该如何处理该文件时出现问题。

您是否在Windows上使用git?是的,抱歉。这是Windows.Diff文件(预期和实际)。这将有助于确定这是否是一个cr/lf类型的问题,或者是否有其他问题正在发生。我实际上无法判断是否是cr/lf造成的。“预期”看起来不错。文件中有一个%PNG头和一些元数据标记,并以结尾结束。实际情况完全不可读。只是一堆特殊的角色。此外,实际文件比预期文件大。有什么明显的方法可以知道它是否是cr/lf的东西吗?请注意%PNG头不是完整的东西-如果它是%PNG\n\r\n\r,那就是行编码重写的问题。我同意-我昨晚确实考虑过这一点。我翻遍了git-p4源代码和文档,看看它是如何从Perforce中提取文件的。结果是它只是做了一个p4打印//path//to//file#修订,所以我在PNG文件上尝试了这个,它们看起来很好。(另外,签入的文件很好。这些文件无论如何都不是新的。)我目前的猜测是Python脚本中读取和写入流的方式正在造成某种损害。(git-p4是一个python脚本)。但是,我在其他地方没有看到这方面的报道。让我觉得这是我设置中的其他东西。