“这种比较花费的时间太长” github上的错误

问题描述

我正在开发一个项目,该项目包含大量的json文件,这些文件从未在拉取请求中进行过审核,但有时需要进行更改。最近,我们不得不对其进行少量更改,而github不允许我使用这些更改创建请求请求。相反,它给了我

This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right Now. It might be too big,or there might be something weird with your repository.

我在本地检查了diff,实际代码更改很小(也许更改了200行),但是这些json文件中有几百万行更改。有什么办法告诉Github忽略它们吗?目前,我无法进行PR,因此更改无法通过我们正常的公司审核过程。

不幸的是,我尝试将.gitattributes文件*.json linguist-generated=true一起使用没有任何效果

编辑:如已接受的答案中所建议,我就此案与github支持人员联系。他们的建议是创建一个带有少量提交的新分支,创建PR,然后将我要部署的实际分支合并到其中。这将更新PR,并且在差异仍然不显示的同时,我可以创建PR。

解决方法

当您比较GitHub上的两个分支时,GitHub必须使用Git计算这些更改的差异,然后为您呈现它。在您的情况下,您有数百万行更改,并且在这种情况下Git的性能不佳,因为用于计算差异的算法为O((N + M)D)。因此,如果您有许多与行数成正比的差异,则该算法本质上就是O(N²)。 N大会使情况变得更糟。

GitHub对请求的执行时间有限制,因此您的大量更改都不会在界面中呈现。即使diff不会渲染,也可以选择所需的分支,并仍然打开拉取请求。如果不是这样,您可能需要使用API​​,该API不会生成用于渲染的差异,因此可能工作得更好。

如果您还无法通过UI找到解决方法,我鼓励您让GitHub支持人员了解这一点,因为他们可以通知某人以确保该接口可用于创建PR,甚至如果差异无法渲染。您可能不是第一个遇到此问题的人。

您可能还希望将这些文件存储在某种工件服务器上的Git外部,然后基于哈希将它们拉到您的存储库中,在这种情况下,您就不会遇到这种病理情况。