如何使用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
相关产品推荐
相关产品推荐

