如何用Python批量获取GitHub项目的贡献者及提交信息?
获取GitHub项目贡献者与提交信息的Python实现
方案一:基于GitHub API(PyGitHub库)
适合批量处理远程GitHub项目,无需克隆仓库,通过官方API获取数据,需配置个人访问令牌(PAT)以提升请求限额。
步骤:
- 安装依赖:
pip install PyGitHub
- 生成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请求限额限制。
步骤:
- 安装依赖:
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
相关产品推荐
相关产品推荐

