2014-04-28 61 views
5

我有一个嵌入式系统,我无法安装任何东西,我可能用来获取某些东西的唯一工具是wget。事实证明,你不能用wget做与卷曲相同的事情。我无法为这个系统交叉编译,所以我需要求助于Python或shell脚本。有一种名为Dulwich的git的纯Python实现实际上有一些我需要交叉编译的C代码......所以我甚至用这个函数来查看这个,FYI。从github下载tarball而不卷曲

我需要的是从github存储库获取代码,并且明显的解决方案是使用他们提供的tarball。我通常复制链接以从存储库页面下载zip按钮,并使用授权令牌代替用户名和密码。它的工作原理很简单,卷曲,像这样:

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

原来wget的是较为尴尬,无论我尝试了不工作。

+1

你为什么不能交叉编译? –

+0

原因我没有相同的工具链来编译动态链接版本的curl(或git)。如果我尝试编译这两者中的任何一个的静态链接版本,则可能需要很长时间才能从头开始整理所有依赖关系。为什么我真的必须,如果完整版的wget已经存在了...而且我也有Python,但是使用urllib2可能会非常乏味,我需要明确地处理重定向和重试等内容。 – errordeveloper

+1

Dulwich中的C代码是可选的。您可以使用“setup.py install --pure”构建而无需使用Dulwich。尽管如此,C扩展将显着改善较大存储库的性能。 – jelmer

回答

6

打我的头wget的标志的各种组合涉及后两种:

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

我回头看了看文档,发现有在releases API替代终点。看起来像首先我不能使用Authorization头与服务器主机tarballs和其次curl(或github前端,基于代理字符串)似乎是做一个不同的事情与<token>@github.com vs wget的--user=<token>,它不是最愉快的事情弄清楚。

那么,什么工作原理是:

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