我正在开发一个 Web 应用程序,我发现 GitHub 无法正确复制某些图像文件。这些文件被正确识别为二进制文件,并且它们在我的本地计算机(Windows、Apache、MySQL、PHP)上正常工作,但是当我上传到服务器时,某些图像文件无法工作。 Google Chrome 不会显示它们,没有错误或原因,而 Firefox 则表示无法显示图像,因为它包含错误。
因此,我将有问题的文件从服务器传输到我的工作站,并使用十六进制编辑器,我发现从服务器复制回的文件短了一个字节。似乎文件中 PNG 标记之后的下一个字节应该是 0x0D,但它已被删除,其余字节已被转移。
这意味着错误的文件位于存储库中。
现在我的问题是,如何修复存储库?
编辑:
在对这个问题进行了一番争论之后,我得出的结论是,问题似乎是 GitHub 正在尝试对有问题的文件应用 CRLF -> LF 过滤器。我不确定它为什么要这样做,但这似乎确实是这里发生的事情。
最佳答案
GitHub 本身不执行 CRLF 技巧。 GitHub——好吧,除了它的网络界面——只是为你存储提交。提交是不可侵犯的。
Git 可以被告知执行 CRLF 技巧。这些发生在两个地方:
当文件从索引复制到工作树时,Git 将进行您要求的任何输出端转换。一般来说,Windows 用户经常要求 Git 将仅 LF 行结尾转换为 CRLF 行结尾。
当文件从工作树复制到索引时,Git 将进行您要求的任何输入端转换。 Windows 用户可能会要求 Git 将 CRLF 行结尾转换为仅 LF 行结尾。
作为 Windows 用户,您必须小心告诉 Git 以这种方式操作的哪些文件。您可以通过保存在名为 .gitattributes
的文件中的设置来执行此操作:
* text=auto
*.txt text
*.jpg -text
您使用 core.eol
或 core.autocrlf
或类似内容进行的任何一揽子设置永远不会像 .gitattributes 中的特定设置那样仔细和精确
,因此,如果您要使用 Git 的此功能,请使用 .gitattributes
文件。
请参阅 the gitattributes documentation 中的示例了解更多。
注:"GitHub Desktop" is a program ,与 Git 存储库托管站点分开,并且该程序确实执行 CRLF 技巧,大概与 Git 的方式相同。
关于GitHub:未正确复制二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51659932/