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

标签 git github binaryfiles

我正在开发一个 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.eolcore.autocrlf 或类似内容进行的任何一揽子设置永远不会像 .gitattributes 中的特定设置那样仔细和精确,因此,如果您要使用 Git 的此功能,请使用 .gitattributes 文件。

请参阅 the gitattributes documentation 中的示例了解更多。

注:"GitHub Desktop" is a program ,与 Git 存储库托管站点分开,并且该程序确实执行 CRLF 技巧,大概与 Git 的方式相同。

关于GitHub:未正确复制二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51659932/

相关文章:

java - 有没有办法使用 Java 中的 readUTF() 检测二进制文件的结尾?

windows - 使用 DeltaCopy 在 Windows 上出现 Rsync 错误

go - 如何轮询 GitHub 存储库以拉取更改

git - 如何将文件夹中的所有内容添加到我的 GitHub Repo

python - 为什么 Github API 允许我访问但不列出私有(private)仓库?

ios - 使用 Expo 构建二进制文件是否会压缩应用程序的大小?

git - 如何使用 TFVC 轻松存储和切换代码版本

Github - 流量 - 奇怪的 "Git clones"统计

git - 获取旧分支中不存在于新分支中的文件列表?

jquery - 如何通过 JQuery Ajax PUT 方法发送二进制数据