使用Git作为通用软件的修补解决方案

问题描述

我是我交付给用户的C#应用​​程序的开发人员。它目前很小,如果有的话,我只下载整个的最新版本。 在某个时候,我将需要制作更智能的补丁。我偶然发现这基本上就是Git和SVN所做的。

是否有某些示例,例如有人在客户端PC上使用git pull来更新其软件?我可能需要运送git.exe并以静模式运行它。我相信这是某些企业进行更新的方式,但是我找不到很多信息。

如果这行得通,那将比实现我自己的补丁解决方案容易得多。

解决方法

由于许多原因,Git并不是补丁软件的好工具,尤其是在PC上。

首先,Git存储库具有每个修订的历史记录,这意味着随着您发布更多版本,每次发布时下载目录的大小都会增加。您的软件用户不会喜欢这种额外的磁盘空间使用。即使您做了一些不愉快的事情来解决这个问题,Git仍然会存储其中一些对象一段时间。

第二,在Windows上,具有功能性的Git实现不仅需要Git二进制文件,还需要Shell和完整的POSIX工具套件,因为Git依赖于POSIX环境。在Unix上,这并不是真正的问题,但是在Windows上,这可能是大量潜在的附加软件。此外,您不能自动发送自己的版本,因为它可能与已经安装的版本冲突。

第三,Git的运行方式与典型PC上的其他软件略有不同。您需要考虑一些事情,例如系统是使用代理服务器还是需要自定义证书来处理TLS MITM设备,如果是,那么您认为该配置是否支持工作(尤其是后者,某些情况下需要)公司环境,是一个安全问题)。 Git具有针对所有这些功能的自定义配置,不一定与系统设置的工作方式相同。

第四,您还必须保持Git最新。像其他任何重要软件一样,Git也需要安全更新。虽然Git具有相当不错的安全历史记录,但它使用的其他软件(例如TLS库)将需要经常更新。

最后,Git通过其配置文件从各种各样的位置读取数据。尽管可以避免从这些位置中的大多数位置进行读取,但是这样做很棘手,并且需要对它的工作方式有深入的了解,因为您不想使用用户设置的任何本地Git配置。

最终,我建议使用著名的软件来执行自动更新。如果找不到一个,可以使用xdelta之类的工具来生成可应用的增量二进制补丁。请注意,您将需要使用健壮的算法对安全更新进行数字签名以防止篡改,并使用TLS的安全版本通过HTTPS下载这些更新。不执行其中任何一项将被视为安全漏洞。

通常,这是一个难题,在Linux上通常可以通过发行版解决。我不建议在这里使用自己的解决方案。