You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python检测公开Git仓库是否有更新(新提交)

使用Python检测公开Git仓库是否有新提交

方法一:借助GitPython库实现

先安装依赖:

pip install gitpython

这个方法需要本地有仓库的克隆副本,拉取远程最新代码后对比本地与远程的commit哈希即可判断更新:

from git import Repo

def has_new_commits(repo_path, remote_name="origin"):
    repo = Repo(repo_path)
    # 获取本地当前分支的最新commit哈希
    local_head = repo.head.commit.hexsha
    # 拉取远程仓库的最新更新
    repo.remote(remote_name).fetch()
    # 获取远程对应分支的最新commit哈希
    remote_head = repo.refs[f"{remote_name}/{repo.active_branch.name}"].commit.hexsha
    
    if local_head != remote_head:
        return True, f"检测到新提交:本地[{local_head[:7]}] → 远程[{remote_head[:7]}]"
    return False, "当前已是最新版本"

# 首次使用需先克隆仓库:Repo.clone_from("公开仓库地址", "./local_repo")
status, message = has_new_commits("./local_repo")
print(message)

方法二:直接调用Git命令(无第三方库依赖)

利用subprocess模块执行原生Git命令,适合不想安装额外库的场景:

import subprocess

def check_repo_updates(repo_path):
    # 拉取远程最新信息
    subprocess.run(["git", "fetch"], cwd=repo_path, capture_output=True, text=True)
    # 获取本地HEAD哈希
    local_hash = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=repo_path, text=True).strip()
    # 获取远程origin的HEAD哈希
    remote_hash = subprocess.check_output(["git", "rev-parse", "origin/HEAD"], cwd=repo_path, text=True).strip()
    
    if local_hash != remote_hash:
        return True, f"有新提交:本地[{local_hash[:7]}] vs 远程[{remote_hash[:7]}]"
    return False, "无更新"

status, message = check_repo_updates("./local_repo")
print(message)

方法三:通过托管平台API检测(无需克隆仓库)

针对GitHub、GitLab等公开托管平台,可以直接调用API获取最新commit哈希,与本地保存的历史哈希对比:

import requests

def check_github_updates(repo_full_name, saved_hash):
    # repo_full_name格式为"用户名/仓库名"
    api_endpoint = f"https://api.github.com/repos/{repo_full_name}/commits"
    resp = requests.get(api_endpoint)
    if resp.status_code == 200:
        latest_hash = resp.json()[0]["sha"]
        if latest_hash != saved_hash:
            return True, f"新提交已出现,最新哈希:{latest_hash[:7]}"
        return False, "无更新"
    return False, "获取远程仓库信息失败"

# 示例:传入之前记录的commit哈希
status, message = check_github_updates("username/target-repo", "a1b2c3d")
print(message)

注意事项

  • 方法一、二需要本地克隆仓库,适合需要后续同步更新的场景
  • 方法三无需克隆,但要注意平台API的请求限制(比如GitHub未认证请求每小时最多60次)
  • 若检测私有仓库,需在请求中添加认证令牌,但本文针对公开仓库无需额外处理

内容的提问来源于stack exchange,提问作者iq tech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:54:12