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

如何用Python批量获取GitHub项目的贡献者及提交信息?

获取GitHub项目贡献者与提交信息的Python实现

方案一:基于GitHub API(PyGitHub库)

适合批量处理远程GitHub项目,无需克隆仓库,通过官方API获取数据,需配置个人访问令牌(PAT)以提升请求限额。

步骤:

  1. 安装依赖:
pip install PyGitHub
  1. 生成GitHub个人访问令牌:登录GitHub后,进入「Settings > Developer settings > Personal access tokens」,生成带repo权限的令牌。

代码示例:

from github import Github

# 替换为你的GitHub个人访问令牌
GITHUB_TOKEN = "your_personal_access_token"
# 项目清单,格式为「用户名/仓库名」
REPO_LIST = ["owner/repo1", "owner/repo2"]

# 初始化GitHub客户端
g = Github(GITHUB_TOKEN)

for repo_name in REPO_LIST:
    try:
        repo = g.get_repo(repo_name)
        print(f"=== 仓库: {repo_name} ===")
        
        # 获取贡献者列表
        print("\n贡献者:")
        contributors = repo.get_contributors()
        for contributor in contributors:
            print(f"- {contributor.login} (提交数: {contributor.contributions})")
        
        # 获取最近10条提交信息(可调整数量)
        print("\n最近10条提交:")
        commits = repo.get_commits()[:10]
        for commit in commits:
            commit_msg = commit.commit.message.splitlines()[0]
            print(f"- 哈希: {commit.sha[:7]} | 作者: {commit.commit.author.name} | 信息: {commit_msg}")
            
    except Exception as e:
        print(f"处理 {repo_name} 失败: {str(e)}")

方案二:操作本地Git仓库(GitPython库)

适合已克隆到本地的项目,直接读取本地Git数据,不受API请求限额限制。

步骤:

  1. 安装依赖:
pip install gitpython

代码示例:

from git import Repo
import os

# 本地仓库路径清单
LOCAL_REPO_PATHS = ["/path/to/your/repo1", "/path/to/your/repo2"]

for repo_path in LOCAL_REPO_PATHS:
    git_dir = os.path.join(repo_path, ".git")
    if not os.path.exists(git_dir):
        print(f"{repo_path} 不是有效的Git仓库")
        continue
    
    try:
        repo = Repo(repo_path)
        print(f"=== 本地仓库: {repo_path} ===")
        
        # 获取贡献者列表(基于git shortlog命令)
        print("\n贡献者:")
        shortlog = repo.git.shortlog("-sn")
        for line in shortlog.splitlines():
            commit_count, author_name = line.strip().split("\t", 1)
            print(f"- {author_name} (提交数: {commit_count})")
        
        # 获取最近10条提交信息
        print("\n最近10条提交:")
        for commit in repo.iter_commits(max_count=10):
            commit_msg = commit.message.splitlines()[0]
            print(f"- 哈希: {commit.hexsha[:7]} | 作者: {commit.author.name} | 信息: {commit_msg}")
            
    except Exception as e:
        print(f"处理 {repo_path} 失败: {str(e)}")

关于基础Git命令失败的可能原因

  • 未克隆目标仓库:基础Git命令需要本地仓库,若仅操作远程仓库需先执行git clone。
  • 未拉取最新数据:需先执行git fetch或git pull同步远程提交。
  • 权限不足:私有仓库需配置SSH密钥或HTTPS凭证,否则无法访问。

内容的提问来源于stack exchange,提问作者Subrata Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:35:35