在GitHub上显示二进制文件的文本差异

问题描述

我正在尝试使用Git和GitHub同步许多应用程序配置文件。这些是以二进制格式存储的XML或plist文件。例如,Keyboard Maestro .kmsync file

我可以open these files via a text editor查看XML格式。

但是当我在GitHub Pull Request,commit视图等中查看这些文件差异时,我看到了无用的二进制差异,没有可见的变化:

显示0个添加项和0个删除项。
BIN +17字节(100%)
二进制文件显示

我可以通过.gitattributes文件通过git在本地显示基于文本的差异。但是,似乎GitHub不尊重这些修改

GitHub并不使用.gitattributes文件来选择要在差异中显示文件,因此无法以这种方式解决[source]

当我在commit和Pull Requests中在GitHub上查看这些文件时,我想查看基于文本的更改和行差异。

例如,此处的GitHub PR。随意进行分叉和实验:
https://github.com/pkamb/so/pull/1

我如何说服 GitHub存储库的Web视图对某些“二进制”文件使用基于文本的差异?


我找不到针对特定问题的现有问题(在GitHub上显示非二进制差异 )。

以下问题与此行为有关,但与本地git(而非GitHub)有关。

我的问题是这个问题的相反,该问题试图将文本文件显示为GitHub上的二进制文件

解决方法

没有一种方法可以强制GitHub将这些文件显示为文本,因为它们不是。当GitHub将文件呈现为HTML页面的一部分时,它们必须采用某种编码方式,而如今编码的唯一合理选择是UTF-8。这些文件不能包含以UTF-8形式显示的字节序列,因为它们除了控制字符外还包含在UTF-8中无效的字节序列,这些字符通常无法在网页中很好地呈现。

使用.gitattributes类型和配置文件中的diff属性,可以使用diff.*.textconv文件将这些文件转换为文本以进行比较。这在您的机器上很好用,但是在GitHub上不起作用。首先,GitHub没有提供用于呈现文件的工具,其次,GitHub总体上不支持用于呈现文件的外部程序,主要是出于安全原因。支持某些常用格式,但这不是其中一种。

还要注意,要使用的程序存储在Git配置中,而不存储在.gitattributes文件中;这是故意的,因为传送要在存储库中执行的程序列表是一个安全问题。因此,GitHub甚至不可能知道您将在此处使用的程序。

如果您的kmsync文件具有等效的纯文本格式,可以将其编译为二进制格式,则可以将该格式存储在存储库中并作为构建步骤的一部分进行构建。这将是可变化的,并且仍将提供可用于项目的二进制格式。这与将代码编译为二进制文件或将纯文本编译为PDF一样。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...