使用SSH密钥时如何使用GitPython执行"git push"?

How to use GitPython to perform "git push" when using SSH Keys?

我正在尝试编写一个 Python 控制器,它将帮助我自动化 Git - 用法。我已经得到了所有其他命令的工作 - 但我在使用 GitPython 库时遇到 git push 等价物的困难。

这就是我现在所在的位置。这应该在没有 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.

根据我对这个 () 的理解,这里的策略是使用 GIT_SSH 环境变量来提供可执行文件,这将调用 ssh - 但由于我是初学者,我无法理解该环境变量究竟应该包含什么,以及如何用 push 函数包装它。

提前致谢!

首先,在 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 一起工作的东西都应该在没有特殊配置的情况下正常工作。