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

如何使用PyGithub创建仓库并在单次提交中添加多个文件

PyGithub 多文件合并为单次提交实现方案

repo.create_file 是PyGithub封装的单文件便捷提交接口,每次调用都会生成独立的提交记录,无法合并多个文件到同一次提交。要实现需求需手动调用Git底层接口,构造包含多文件的提交树后手动生成提交。

from github import Github
from github.InputGitTreeElement import InputGitTreeElement

# 初始化认证,替换为你的个人访问Token
g = Github("YOUR_GITHUB_ACCESS_TOKEN")

# 配置参数和你原有定义保持一致
filename1 = "dummy1"
filename2 = "dummy2"
file1_content = "something"
file2_content = "something"
repo_name = "dummy_repo"
commit_message = "add 2 initial files"

# 1. 创建空仓库
repo = g.get_user().create_repo(repo_name)

# 2. 为两个文件分别创建Git Blob对象(存储文件内容)
blob1 = repo.create_git_blob(file1_content, "utf-8")
blob2 = repo.create_git_blob(file2_content, "utf-8")

# 3. 构造提交树节点,绑定文件路径、权限和对应的Blob
tree_elements = [
    InputGitTreeElement(
        path=filename1,
        mode="100644", # 普通文件权限,可执行文件改为100755
        type="blob",
        sha=blob1.sha
    ),
    InputGitTreeElement(
        path=filename2,
        mode="100644",
        type="blob",
        sha=blob2.sha
    )
]

# 4. 生成Git树对象,空仓库首次提交无父树,第二个参数传False
git_tree = repo.create_git_tree(tree=tree_elements)

# 5. 创建提交记录,首次提交无父提交,parents传空列表
git_commit = repo.create_git_commit(
    message=commit_message,
    tree=git_tree,
    parents=[]
)

# 6. 将提交绑定到仓库默认分支,完成推送
repo.get_git_ref(f"heads/{repo.default_branch}").edit(sha=git_commit.sha)
  • 如果是往已有提交的存量仓库提交多文件,需要先获取当前分支最新的提交作为父提交,同时构造新树时要基于父提交的旧树生成,避免覆盖已有文件。
  • 可根据需求传入author、committer参数自定义提交人信息,需提前导入InputGitAuthor类。

内容的提问来源于stack exchange,提问作者Raj Tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:06:03