GitHub:二进制文件未正确复制

时间:2018-08-02 18:16:49

标签: git github binaryfiles

我正在开发Web应用程序,但我发现GitHub无法正确复制某些图像文件。这些文件被正确识别为二进制文件,并且可以在我的本地计算机(Windows,Apache,MySQL,PHP)上正常工作,但是当我上载到服务器时,某些图像文件不起作用。 Google Chrome不会显示它们,没有错误或原因,Firefox表示该图像包含错误,因此无法显示。

因此,我将有问题的文件从服务器FTP传输到我的工作站,然后使用十六进制编辑器,发现从服务器复制回的文件短了一个字节。似乎文件中的PNG标记之后,下一个字节应为0x0D,但已将其删除,其余字节已移出。

因此,这意味着错误的文件位于存储库中。

现在我的问题是,如何修复存储库?

编辑:

在解决了这个问题后,我得出的结论是,问题似乎是GitHub试图将CRLF-> LF过滤器应用于相关文件。我不确定为什么要这样做,但这似乎就是这里发生的事情。

1 个答案:

答案 0 :(得分:3)

GitHub本身做CRLF技巧。 GitHub(无论如何,除了其Web界面)都只是为您存储提交。犯规。

可以告诉

Git 做CRLF技巧。这些发生在两个地方:

  • 当文件从索引 复制到工作树时,Git会进行您要求的任何输出端转换。通常,Windows用户经常要求Git将仅LF的行尾转换为CRLF的行尾。

  • 当文件从工作树复制到索引中时,Git会进行您要求的任何输入端转换。 Windows用户可能会要求Git在这里将CRLF的行尾转换为仅LF的行尾。

作为Windows用户,您必须注意告诉Git使用哪种方式操作的文件。您可以通过保存在名为.gitattributes的文件中的设置来做到这一点:

*       text=auto
*.txt   text
*.jpg   -text

您使用core.eolcore.autocrlf或类似方法进行的所有设置都不会像.gitattributes中的特定设置那样仔细和精确,因此,如果要使用此功能Git,请使用.gitattributes文件。

有关更多信息,请参见the gitattributes documentation中的示例。