我正在尝试将gitpython与IDE集成,但我在推送时遇到了一些问题。
remote_repo = self.repo.remotes[remote]
remote_repo.push(self.repo.active_branch.name)
当我运行此命令时,或只是
git push --porcelain origin master
提示询问我的ssh密码。
Enter passphrase for key '/home/user/.ssh/id_rsa':
我的问题是:
我该如何解决它并提供一个界面来识别是否需要密码,如果能够提供密码?
答案 0 :(得分:1)
跨平台解决方案适合您launch first the ssh-agent
并致电OLTP test statistics:
queries performed:
read: 358498
write: 0
other: 51214
total: 409712
transactions: 25607 (426.73 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 358498 (5974.23 per sec.)
other operations: 51214 (853.46 per sec.)
Test execution summary:
total time: 60.0074s
total number of events: 25607
total time taken by event execution: 479.9015
per-request statistics:
min: 7.50ms
avg: 18.74ms
max: 48.85ms
approx. 95 percentile: 21.88ms
Threads fairness:
events (avg/stddev): 3200.8750/5.73
execution time (avg/stddev): 59.9877/0.00
有关钥匙串等其他替代方案,另请参阅“How can I run ssh-add automatically, without password prompt?”。
ssh-add
这将要求您提供密码,然后存储。
任何需要ssh私钥的后续ssh调用(使用gitpython或任何其他工具)都不需要输入私钥密码。
答案 1 :(得分:1)
如果您希望完全控制ssh连接的方式,并且使用git 2.3或更新版本,则可以使用GIT_SSH_COMMAND
环境变量集实例化git。它指向一个名为的脚本的ssh。因此,您可以确定是否需要密码,并启动其他GUI以获得所需的输入。
在代码中,它看起来像这样:
remote_repo = self.repo.remotes[remote]
# here is where you could choose an executable based on the platform.
# Shell scripts might just not work plainly on windows.
ssh_executable = os.path.join(rw_dir, 'my_ssh_executable.sh')
# This permanently changes all future calls to git to have the given environment variables set
# You can pass additional information in your own environment variables as well.
self.repo.git.update_environment(GIT_SSH_COMMAND=ssh_executable)
# now all calls to git which require SSH interaction call your executable
remote_repo.push(self.repo.active_branch.name)
请注意,这仅适用于通过SSH访问资源。例如,如果协议是HTTPS,则无论如何都可能会提供密码提示。
在git 2.3之前,您可以使用GIT_SSH
环境变量。它的工作方式不同,因为它只包含ssh
程序的路径,其中将传递其他参数。当然,这可能是您的脚本,也类似于上面显示的。我想更准确地指出这两个环境变量之间的差异,但缺乏个人经验。