GitHub:如何检查我是否已经拥有当前的master分支zip?

时间:2019-01-11 21:15:55

标签: python python-3.x github python-requests

我尝试检查我是否已经在GitHub上拥有版本库主分支的当前版本。我希望它可以与ETag一起使用,因此,如果我将最后保存的ETag提供给我的请求,并且ETag与远程请求相同,那么我就不需要再次下载。

我使用此代码进行检查:

import requests


etag_old = '"8ec0bb526b1b281a450669d79ca9ed0c7ff6b4f2"'
headers = {"If-None-Match": etag_old}

# Also doesn't work: https://codeload.github.com/Endogen/OpenCryptoBot/zip/master
response = requests.get("https://github.com/Endogen/OpenCryptoBot/archive/master.zip", headers=headers)

if response.status_code == 200:
    print(f"Status-Code: {response.status_code}")
    print(f"New ETag: {response.headers.get('ETag')}")
    print(f"History: {response.history}")
    print(f"URL: {response.url}")
else:
    # If we get status code 304, it's working
    print(f"Status-Code: {response.status_code}")

奇怪的是,这行不通。此外,response.url中的URL不起作用。既然可行,它与URL有关:

import requests


etag_old = '"29b127a376b492572f7e332ba5dd38ea89d4d37c"'
headers = {"If-None-Match": etag_old}

response = requests.get("https://raw.githubusercontent.com/endogen/Telegram-Kraken-Bot/master/telegram_kraken_bot.py", headers=headers)

if response.status_code == 200:
    print(f"Status-Code: {response.status_code}")
    print(f"New ETag: {response.headers.get('ETag')}")
    print(f"History: {response.history}")
    print(f"URL: {response.url}")
else:
    # If we get status code 304, it's working
    print(f"Status-Code: {response.status_code}")

我的问题是:如何可靠地检查是否已经具有当前的master分支版本?

我正在使用Python 3.7

1 个答案:

答案 0 :(得分:1)

除了Etag之外,您还可以使用Github API检查分支信息。

curl -i https://api.github.com/repos/Endogen/OpenCryptoBot/branches/master

您可以像Etag一样存储和使用提交哈希来决定是否下载:

{
  "name": "master",
  "commit": {
    "sha": "a20434b7d213ff1321b7eaf896246dbf67b9fdbd",
    ...

但是我想知道是否允许您运行python脚本,也许可以先在脚本中安装git。如果是这样,这是最轻松的方法,并且有一个名为GitPython的不错的lib与git交互。