首页 > 解决方案 > 使用 SSH 密钥时如何使用 GitPython 执行“git push”?

问题描述

我正在尝试编写一个 Python 控制器,它可以帮助我自动化 Git 的使用。我已经让所有其他命令都可以工作了——但是git push在使用 GitPython 库时,我遇到了等效的困难。

这就是我现在的位置。这应该在没有 SSH 密钥识别的情况下工作,但我必须把它挤进去。

""" Execute Git Push with GitPython Library.
Hardcoded values: 'branch' environment.
TODO: This is not working. """
def push(self, repo_path, branch, commit_message, user):
    repo = Repo(repo_path)
    repo.git.add('--all')
    repo.git.commit('-m', commit_message)
    origin = repo.remote(name=branch)
    origin.push()

这就是我的初始化。(由于隐私原因清除了一些值。)

    load_dotenv()
    self.BRANCH = "TBD" # Hardcoded Value
    self.REPO_PATH = os.getenv('REPO_PATH')
    self.REPO = Repo(self.REPO_PATH)
    self.COMMIT_MESSAGE = '"Commit from Controller."'

    # TODO: These should be changed, when deployed.
    self.GIT_SSH_KEY = os.path.expanduser('/home/user/.ssh/id_rsa')
    self.GIT_SSH_CMD = "ssh -i %s" % self.GIT_SSH_KEY
    self.GIT_USER = "user" # This needs to be changed.

根据我对此的理解(GitPython and SSH Keys?),这里的策略是使用GIT_SSH环境变量来提供可执行文件,这将调用ssh- 但由于我是初学者,我无法理解该环境变量应该包含的确切内容,并且如何用push函数包装它。

先感谢您!

标签: pythongitautomationpushgitpython

解决方案


首先,设置值self本身不会完成任何事情,除非您没有向我们展示您的代码的某些部分。如果需要设置GIT_SSH环境变量,则需要设置os.environ['GIT_SSH'].


通常,GIT_SSH除非您需要非默认的 ssh 命令行,否则您不需要设置。也就是说,如果我有:

$ git remote -v
origin  ssh://git@github.com/larsks/gnu-hello (fetch)
origin  ssh://git@github.com/larsks/gnu-hello (push)

然后我可以写:

>>> import git
>>> repo = git.Repo('.')
>>> origin = repo.remote('origin')
>>> res = origin.push()
>>> res[0].summary
'[up to date]\n'

我不必在这里设置任何特别的东西;默认值是完全合适的。在后台,GitPython 只是调用git命令行,所以任何与 cli 一起工作的东西都可以在没有特殊配置的情况下正常工作。


推荐阅读