2017-09-05 87 views
0

存檔和發佈(codeload)之間有什麼區別。爲什麼我的Github存檔的大小是Github的兩倍?

這個網址:

的區別是什麼?有些工具告訴我,我可以使用github API(codeload stuff)下載一個版本,但這些tar.gz的大小是不一樣的?

問題是我無法使用API​​下載'small'版本。

+2

下載檔案,解壓縮,比較其內容。 – axiac

回答

1

小文件不包含整個測試套件或其固定裝置。這是需要大部分空間的。

$ du -sh __tests__ 
26M __tests__ 

這是因爲這兩個大文件都或多或少地包裝了庫本身進行下載,而發行包是一個內置的神器僅包含發行代碼。它由scripts/build-dist.sh生產。它不包含任何測試,因爲在(已經測試過的)版本發行版中不需要這些測試。

如果你想從Github使用API​​獲取這個,應該這樣的工作。

#!/usr/bin/env python3 

import json 
import requests 
import shutil 

headers = {'Accept': 'application/vnd.github.v3+json'} 

author_name = "yarnpkg" 
repo_name = "yarn" 
tag_name = "v0.23.4" 

download_path = "/tmp/{}-{}.tar.gz".format(repo_name, tag_name) 

# To get latest release, sub in this URL instead: 
# /repos/:owner/:repo/releases/latest 
r = requests.get(
    "https://api.github.com/repos/{}/{}/releases/tags/{}".format(
     author_name, 
     repo_name, 
     tag_name, 
    ), 
    headers=headers) 

if r.status_code == 200: 
    json_response = r.json() 
    for asset in json_response["assets"]: 
     if asset["name"] == "{}-{}.tar.gz".format(repo_name, tag_name): 
      download_url = asset["browser_download_url"] 
      print("Downloading to {}".format(download_path)) 
      r2 = requests.get(download_url, stream=True) 
      with open(download_path, "wb") as out_file: 
       shutil.copyfileobj(r2.raw, out_file) 
      print("Download complete.") 
else: 
    print('ERROR: GitHub response code {} unexpected.'.format(
     r.status_code 
    )) 

您可以在GitHub API documentation閱讀更多關於這一點。

我想你可以使用git數據API來獲取repo的全部內容......但是在這一點上使用git clone可能更容易一些?

+0

謝謝,它仍然有點傷心,你只能下載包含github api的測試集版本 – DenCowboy

+0

@DenCowboy我更新了我的答案,併發布了一個API下載示例...易於適應文檔中發現的其他端點。有一個「完整源代碼」的API端點可以做你以後的事情(我沒有嘗試過)。 https://developer.github.com/v3/repos/contents/#get-archive-link –

相關問題