在电子应用程序中克隆git repo,编译git的静态链接构建



我需要能够为我正在开发的电子(node.js(应用程序克隆和签出git-reos。该应用程序有望在Windows和流行的Linux发行版上运行,而不需要预安装任何外部依赖项。这意味着我不能假设git将在命令行中安装并可用。

我尝试过这些回购,但每次都遇到了问题:

同构git-在克隆时似乎疯狂地消耗内存,然后在试图处理1.8GB的包文件时由于内存不足而崩溃。

nodegit-在应用程序编译过程中失败,或者在应用程序启动时失败,错误似乎都与最近版本的electronic/node有关。可以看到许多其他人在GH问题上有相同和相似的问题,但似乎尚未解决。尝试了多个不同的版本,但没有成功。

wasm-git-奇怪而尴尬的界面,可以克隆,但它似乎没有.git文件夹,并且不知道如何让签出工作。缺乏文档,在电子内部工作似乎有自己的问题。

简单的git-看起来是一个不错的、写得很好的lib,但需要在系统上预安装git,或者指向一个可以与之接口的自定义git二进制文件。

将可移植的git.exe与我的应用程序捆绑在一起,我可以直接使用,也可以与简单的git一起使用,这似乎是我唯一的选择,但我不知道如何获得一个小的git.exe;便携式;windows的git在提取后是280MB,这对我来说太大了,无法捆绑。

有人能帮我为Windows&文件大小不是绝对巨大的Linux?我对C或将C程序编译成二进制文件一无所知,更不用说完全可移植的了。我试着折腾了好几个小时,想知道怎么做,但进展不快。

关于如何克隆&欢迎在我的应用程序中结账。

最好使用libgit2和Node.js的绑定。libgit2是一个可以编译和运行的库,不需要任何其他依赖项,它将提供大多数客户端Git函数,尽管级别低于命令行Git。它被广泛用于各种环境中,尽管它缺乏一些功能(如SHA-256存储库支持(。

在Windows上使用Git可能会遇到的问题是,Git需要POSIX工具,包括POSIX外壳来执行各种功能。Windows缺乏这一功能,所以你必须自己发货,即使你使用Busybox这样的东西,它仍然需要大量空间。

我要注意的是,即使你使用libgit2,你仍然需要链接一个TLS库,让你的应用程序达到最低限度的功能。在Windows上,提供了一个TLS库,但在Linux上,我强烈建议不要将TLS库静态链接到二进制文件中,因为它们一直都有安全更新,一旦新版本发布,你将立即负责更新你的应用程序,否则你的应用程序将出现安全问题。

因为这些库(其中OpenSSL最受欢迎(通常不可在Linux发行版之间移植,所以您需要为每个平台提供一个二进制文件。无论如何,您都需要这样做,因为如果您正在运送Node或另一个运行时,它也将依赖于TLS库,可能还依赖于glibc,而glibc无论如何都需要这样。

我是wasm-git的作者,但首先我要说的是,wasm-git只是libgit2使用Emscripten到WebAssembly的一个端口。这意味着,对于如何与文件交互的文档,您需要查看emscripten文件系统文档,如果您想公开libgit2的更多功能,则需要查看libgit2示例和文档。

关于如何使用nodejs中的wasm-git的示例,您可以在这里看到测试:https://github.com/petersalomonsen/wasm-git/tree/master/test

那里还有其他测试文件夹,展示了如何在浏览器中使用,有没有(使用emscripten asyncify(webworker。

Wasm-git不需要安装git,它可以克隆、签出和其他一些git操作。我还没有用electronic测试过它,但在存储库中找到的测试用例可以在浏览器和nodejs中使用。

最新更新