python - 使用 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
函数包装它。
先感谢您!
解决方案
首先,设置值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 一起工作的东西都可以在没有特殊配置的情况下正常工作。
推荐阅读
- c++ - C++ Difference Between Const Reference to Non Const Object and Non Const Reference to Non Const Object
- javascript - Pausing all other videos, regardless of how many videos are on a page
- python - Django: generic ListView, only show when in other model via ForeignKey
- ms-access - How Do I Perform A Transpose To A Mailmerge?
- php - I can't find a way to compile phpenmod phpdismod phpquery from the source packages of php (7.2.9-1)
- php - Change name of uploading file into s3
- reactjs - State is undefined when using console.log
- android - 如何在流媒体播放器上使用搜索栏?
- android - 如何使用画布将纬度、经度转换为 x、y 坐标并在 android 设备上绘制路径?
- npm - 同时向 npm 添加延迟