从Github下载tarball而不使用curl

6
我有一个嵌入式系统,无法安装任何东西,唯一可以使用的工具是wget。结果发现,wget无法像curl那样完成相同的任务。我也无法为这个系统进行交叉编译,所以我需要使用Python或shell脚本。实际上,名为Dulwich的纯Python Git实现包含了一些需要进行交叉编译的C代码... 所以我甚至考虑过这一点,供您参考。

我需要从Github仓库获取代码,显然,解决方案就是使用他们提供的tarball。通常,我会复制从存储库页面中下载zip按钮的链接,并使用授权令牌而不是用户名和密码。使用curl很简单:

curl -L https://<token>@github.com/<org|user>/<repo>/archive/master.tar.gz | tar xz

原来wget有点不方便,无论我尝试了什么,它都不能正常工作。

1
为什么你不能进行交叉编译? - Basile Starynkevitch
因为我没有编译curl(或git)动态链接版本的相同工具链。如果我尝试编译两者中的任何一个静态链接版本,可能需要花费很长时间从头开始组装所有依赖项。而且,如果完整版本的wget已经存在,我真的需要吗?我确实也有Python,但使用urllib2可能会非常繁琐,我需要明确处理重定向和重试等问题... - errordeveloper
1
Dulwich中的C代码是可选的。您可以通过使用“setup.py install --pure”进行构建而不使用它。但是,对于较大的存储库,C扩展将显着提高性能。 - jelmer
你的命令真的很有帮助,谢谢! - Sohail
1个回答

7

在尝试多种wget标志的组合时,我遇到了困难,其中包括:

  • --post-data;或者
  • --user=--pasword=以及反之;或者
  • --header="Authorization: token <token>"

我回顾了文档,并发现在发布API中有可供选择的端点。看起来首先我不能在托管tarballs的服务器上使用Authorization头,其次curl(或基于代理字符串的github前端)似乎在处理<token>@github.com和wget的--user=<token>时做了不同的事情,这并不是最愉快的事情。

所以这个可以工作:

wget \
  --header='Authorization: token <token>' \
  https://api.github.com/repos/<org|user>/<repo>/tarball/<ref>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接