如何使用python将本地文件推送到github?(或通过Python发布提交)

发布于 2021-01-29 17:01:02

有哪些选项可用于将文件从python提交和推送到github?

我认为以下三种方法应该可行,因此请按顺序尝试:

  1. 使用 pygithub(Github的python API)将推送请求发送到我的存储库。失败,因为我在API中找不到推入功能。我可以看到编辑文件,但是当我计划经常更换文件时,这无济于事。

  2. git push 在python子进程(HTTPS)的命令行中使用:几乎可以使用,但是我无法弄清楚如何填写所需的用户和密码字段。尝试:

    import subprocess
    

    from pexpect import popen_spawn

    user = ‘GithubUsername’
    password = ‘*****’

    cmd = “cd C:\Users\Dropbox\git-test”
    returned_value = subprocess.call(cmd, shell=True) # returns the exit code in unix

    cmd = “git add .”
    subprocess.call(cmd, shell=True)

    cmd = ‘git commit -m “python project update”’
    subprocess.call(cmd, shell=True)

    cmd = “git remote set-url origin https://github.com/Tehsurfer/git-test.git"
    subprocess.call(cmd, shell=True)

    cmd = “git push “
    child_process = popen_spawn.PopenSpawn(cmd)
    child_process.expect(‘User’)
    child_process.sendline(user)
    child_process.expect(‘Password’)
    child_process.sendline(password)
    print(‘returned value:’, returned_value)

    print(‘end of commands’)`

  3. git push 从python子进程(SSH)在命令行中使用:我在这里遇到的问题是,我找不到在Windows命令提示符下创建ssh代理的方法。通过本教程,我已经能够在MINGW64终端中轻松创建一个对象,但是无法通过Python与之交互。

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    一个非常相似的问题,我可以修改谁的代码,以通过python将多个文件推送到github:

    import base64
    from github import Github
    from github import InputGitTreeElement
    
    user = "GithubUsername"
    password = "*********"
    g = Github(user,password)
    repo = g.get_user().get_repo('git-test')
    file_list = [
        'C:\\Users\jesse\Dropbox\Swell-Forecast\git-test\index.html',
        'C:\\Users\jesse\Dropbox\Swell-Forecast\git-test\margin_table.html'
    ]
    
    file_names = [
        'index.html',
        'margin_table.html'
    ]
    commit_message = 'python update 2'
    master_ref = repo.get_git_ref('heads/master')
    master_sha = master_ref.object.sha
    base_tree = repo.get_git_tree(master_sha)
    element_list = list()
    for i, entry in enumerate(file_list):
        with open(entry) as input_file:
            data = input_file.read()
        if entry.endswith('.png'):
            data = base64.b64encode(data)
        element = InputGitTreeElement(file_names[i], '100644', 'blob', data)
        element_list.append(element)
    tree = repo.create_git_tree(element_list, base_tree)
    parent = repo.get_git_commit(master_sha)
    commit = repo.create_git_commit(commit_message, tree, [parent])
    master_ref.edit(commit.sha)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看