为什么我的Github存档的大小是Github的两倍?
存档和发布(codeload)之间有什么区别。为什么我的Github存档的大小是Github的两倍?
这个网址:
- https://github.com/yarnpkg/yarn/archive/v0.23.4.tar.gz = 12.6MB
- https://github.com/yarnpkg/yarn/releases/download/v0.23.4/yarn-v0.23.4.tar.gz = 3.8MB
- https://api.github.com/repos/yarnpkg/yarn/tarball/v0.23.4 = 12.6MB
的区别是什么?有些工具告诉我,我可以使用github API(codeload stuff)下载一个版本,但这些tar.gz的大小是不一样的?
问题是我无法使用API下载'small'版本。
小文件不包含整个测试套件或其固定装置。这是需要大部分空间的。
$ 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可能更容易一些?
谢谢,它仍然有点伤心,你只能下载包含github api的测试集版本 – DenCowboy
@DenCowboy我更新了我的答案,并发布了一个API下载示例...易于适应文档中发现的其他端点。有一个“完整源代码”的API端点可以做你以后的事情(我没有尝试过)。 https://developer.github.com/v3/repos/contents/#get-archive-link –
下载档案,解压缩,比较其内容。 – axiac