对于被视为 'binary' 的文件,如何在 GitHub 中显示差异?

How do I show a diff in GitHub for files perceived as 'binary'?

我一直在尝试使用其专有脚本语言 Witcher Script 为《巫师 3:狂猎》创建自己的模组,扩展名为 .ws

我创建了一个 Git 存储库来跟踪这些更改,并且我更新了 .gitattribute.git/config 文件以便我可以在 CLI 上看到 git diff 结果:

  1. .gitattribute:
*.ws text
*.ws diff=localizablestrings
  1. .git/config:
[diff "localizablestrings"]
        textconv = "iconv -f utf-16 -t utf-8"

但是,当我在 GitHub 上访问我的 repo 并尝试查看我所做的更改时,我得到了这个:

我必须更新 GitHub 上的任何设置,以便 GitHub 可以将提交更改显示为文本吗?

正如 Joachim Sauer 在评论中提到的,这是不可能的。 UTF-16 格式的文件被认为是二进制文件,因为它几乎肯定包含 NUL 字节。部分原因是因为 GitHub 需要实际呈现差异,并且无效的 UTF-8 内容无法在页面中按原样呈现。

请注意,textconv 命令加载到您的配置中,而不是存储库中,因此,没有其他人甚至拥有它们的副本。这是因为 运行基于存储库自动执行命令会带来巨大的安全风险,因为有人可以轻松地根据恶意命令执行任意代码。

如果这些文件确实是文本文件,只是 UTF-16 格式,请考虑将它们存储为 UTF-8 格式,然后以 UTF-16 格式将它们检出到存储库中。您可以使用以下方法之一执行此操作:

*.ws text working-tree-encoding=UTF-16
# If you need the non-standard variant that's always LE with BOM:
*.ws text working-tree-encoding=UTF-16LE-BOM

请注意,如果您需要行尾为CRLF,您也可以添加eol=crlf

如果你这样做,那么 运行 git add --renormalize .,那么事情应该在 GitHub 中正确呈现。