4

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

我已经阅读了有关 gitattributes 和行尾问题的信息,但我所做的一切似乎都无法改变最终结果。破碎的图像。

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

有任何想法吗?据我了解,git 应该足够聪明,可以在没有此帮助的情况下确定 png 是二进制文件。

这是否与 p4-git 如何从 Perforce 中提取文件特别有关?

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

4

3 回答 3

6

PNG 文件格式有一个标头,专门设计用于查找完成转换的程序,否则会导致失败。

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

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

于 2009-12-08T09:34:08.827 回答
2

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

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

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

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

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

享受。

于 2010-02-02T03:25:31.703 回答
0

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

于 2010-02-18T17:07:56.723 回答