2014-04-28 84 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>