问题描述
我正在尝试使用Git和GitHub同步许多应用程序配置文件。这些是以二进制格式存储的XML或plist文件。例如,Keyboard Maestro .kmsync
file。
我可以open these files via a text editor查看XML格式。
但是当我在GitHub Pull Request,commit视图等中查看这些文件差异时,我看到了无用的二进制差异,没有可见的变化:
我可以通过.gitattributes
文件通过git在本地显示基于文本的差异。但是,似乎GitHub不尊重这些修改:
GitHub并不使用.gitattributes文件来选择要在差异中显示的文件,因此无法以这种方式解决。 [source]
当我在commit和Pull Requests中在GitHub上查看这些文件时,我想查看基于文本的更改和行差异。
例如,此处的GitHub PR。随意进行分叉和实验:
https://github.com/pkamb/so/pull/1
我如何说服 GitHub存储库的Web视图对某些“二进制”文件使用基于文本的差异?
我找不到针对特定问题的现有问题(在GitHub上显示非二进制差异 )。
以下问题与此行为有关,但与本地git
(而非GitHub)有关。
- Override git's choice of binary file to text
- How would you put an AppleScript script under version control?
我的问题是这个问题的相反,该问题试图将文本文件显示为GitHub上的二进制文件:
解决方法
没有一种方法可以强制GitHub将这些文件显示为文本,因为它们不是。当GitHub将文件呈现为HTML页面的一部分时,它们必须采用某种编码方式,而如今编码的唯一合理选择是UTF-8。这些文件不能包含以UTF-8形式显示的字节序列,因为它们除了控制字符外还包含在UTF-8中无效的字节序列,这些字符通常无法在网页中很好地呈现。
使用.gitattributes
类型和配置文件中的diff
属性,可以使用diff.*.textconv
文件将这些文件转换为文本以进行比较。这在您的机器上很好用,但是在GitHub上不起作用。首先,GitHub没有提供用于呈现文件的工具,其次,GitHub总体上不支持用于呈现文件的外部程序,主要是出于安全原因。支持某些常用格式,但这不是其中一种。
还要注意,要使用的程序存储在Git配置中,而不存储在.gitattributes
文件中;这是故意的,因为传送要在存储库中执行的程序列表是一个安全问题。因此,GitHub甚至不可能知道您将在此处使用的程序。
如果您的kmsync
文件具有等效的纯文本格式,可以将其编译为二进制格式,则可以将该格式存储在存储库中并作为构建步骤的一部分进行构建。这将是可变化的,并且仍将提供可用于项目的二进制格式。这与将代码编译为二进制文件或将纯文本编译为PDF一样。