我正在尝试写一个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()
这是我在Initialization中的内容。(由于隐私原因清除了一些值)
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和SSH密钥?)这里的策略是使用GIT_SSH
环境变量来提供可执行文件,它将调用ssh
-但由于我是初学者,我很难理解究竟该环境变量应该包含什么,以及如何将其与push
函数包装。
提前感谢!
首先,在self
上设置值本身并不能完成任何事情,除非你的代码中有一部分你没有向我们展示。如果需要设置GIT_SSH
环境变量,则需要设置os.environ['GIT_SSH']
。
一般来说,除非您需要一个非默认的ssh命令行,否则不需要设置GIT_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一起工作的东西都应该可以正常工作,而无需特殊配置。