在 GitPython 中使用 GIT_SSH_COMMAND
Using GIT_SSH_COMMAND with GitPython
我正在使用 GitPython 初始化新的本地存储库,创建初始提交并推送到规范存储库。不幸的是,最后一步失败了,我很难理解为什么。我确定我只是错误地使用了 GIT_SSH_COMMAND
变量,但我不确定如何使用。没有太多的例子可以继续。
我读过 and dug into the relevant issue and commit,但我显然没能正确地把它放在一起。
帮忙?
"Proof" of Git v2.3+
$ git --version
git version 2.3.1
脚本片段
# Please take my word that I've init'd the repo and that any variables
# have been defined and initialized.
git_ssh_identity_file = os.path.expanduser('~/.ssh/id_rsa')
git_ssh_cmd = 'ssh -i %s' % git_ssh_identity_file
with git_project.git.custom_environment(GIT_SSH_COMMAND=git_ssh_cmd):
git_project.remotes.origin.push(git_project.heads.master)
结果错误
Traceback (most recent call last):
File "./ct-new-project.py", line 204, in <module>
git_project.remotes.origin.push(git_project.heads.master)
File "/Library/Python/2.7/site-packages/git/remote.py", line 667, in push
return self._get_push_info(proc, progress or RemoteProgress())
File "/Library/Python/2.7/site-packages/git/remote.py", line 588, in _get_push_info
handle_process_output(proc, stdout_handler, progress_handler, finalize_process)
File "/Library/Python/2.7/site-packages/git/cmd.py", line 202, in handle_process_output
return finalizer(process)
File "/Library/Python/2.7/site-packages/git/util.py", line 158, in finalize_process
proc.wait()
File "/Library/Python/2.7/site-packages/git/cmd.py", line 300, in wait
raise GitCommandError(self.args, status, self.proc.stderr.read())
git.exc.GitCommandError: 'git push --porcelain origin master' returned with exit code 128
当 GitPython 抛出此类错误时,始终值得检查它试图从命令行执行的实际命令是否有效。您的本地克隆中可能发生了某些更改,导致命令无法成功完成。
与您尝试使用 GitPython 实现的效果相同的方法可以通过以下方式完成:
$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa' git push --porcelain origin master
至少 LINUX。在 Windows 上,您可能需要在单独的命令中直接设置环境变量。
当这样试验时,我发现有一个 "local" upstream 很有用,我可以推送到我硬盘上的某个地方,这样我就可以扔掉它并重新启动 - 或者 git push --force
从上游的第二个(原始)克隆 .. 因为你 知道 你至少会把它搞砸一次。
我正在使用 GitPython 初始化新的本地存储库,创建初始提交并推送到规范存储库。不幸的是,最后一步失败了,我很难理解为什么。我确定我只是错误地使用了 GIT_SSH_COMMAND
变量,但我不确定如何使用。没有太多的例子可以继续。
我读过
帮忙?
"Proof" of Git v2.3+
$ git --version
git version 2.3.1
脚本片段
# Please take my word that I've init'd the repo and that any variables
# have been defined and initialized.
git_ssh_identity_file = os.path.expanduser('~/.ssh/id_rsa')
git_ssh_cmd = 'ssh -i %s' % git_ssh_identity_file
with git_project.git.custom_environment(GIT_SSH_COMMAND=git_ssh_cmd):
git_project.remotes.origin.push(git_project.heads.master)
结果错误
Traceback (most recent call last):
File "./ct-new-project.py", line 204, in <module>
git_project.remotes.origin.push(git_project.heads.master)
File "/Library/Python/2.7/site-packages/git/remote.py", line 667, in push
return self._get_push_info(proc, progress or RemoteProgress())
File "/Library/Python/2.7/site-packages/git/remote.py", line 588, in _get_push_info
handle_process_output(proc, stdout_handler, progress_handler, finalize_process)
File "/Library/Python/2.7/site-packages/git/cmd.py", line 202, in handle_process_output
return finalizer(process)
File "/Library/Python/2.7/site-packages/git/util.py", line 158, in finalize_process
proc.wait()
File "/Library/Python/2.7/site-packages/git/cmd.py", line 300, in wait
raise GitCommandError(self.args, status, self.proc.stderr.read())
git.exc.GitCommandError: 'git push --porcelain origin master' returned with exit code 128
当 GitPython 抛出此类错误时,始终值得检查它试图从命令行执行的实际命令是否有效。您的本地克隆中可能发生了某些更改,导致命令无法成功完成。
与您尝试使用 GitPython 实现的效果相同的方法可以通过以下方式完成:
$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa' git push --porcelain origin master
至少 LINUX。在 Windows 上,您可能需要在单独的命令中直接设置环境变量。
当这样试验时,我发现有一个 "local" upstream 很有用,我可以推送到我硬盘上的某个地方,这样我就可以扔掉它并重新启动 - 或者 git push --force
从上游的第二个(原始)克隆 .. 因为你 知道 你至少会把它搞砸一次。