如何使用git2r包通过SSH推送Git仓库?
使用git2r通过SSH执行推送操作的解决方案
嘿,我之前在Ubuntu Xenial上用git2r 0.21.0版本时也碰到过一模一样的问题——本地命令行和RStudio的SSH操作都完全正常,但就是摸不清怎么在git2r里搞定推送。其实核心就是让git2r正确识别你已经配置好的SSH密钥,下面给你两种靠谱的解决方法:
方法一:直接指定SSH密钥凭证
这种方法适合你想明确控制密钥使用的场景,步骤非常清晰:
- 首先在R中打开你的本地仓库:
repo <- git2r::repository("path/to/your/project") # 如果当前工作目录就是项目根目录,直接用"./"就行
- 创建SSH凭证对象,指定你的私钥路径(默认是
~/.ssh/id_rsa):
cred <- git2r::cred_ssh_key( privatekey = "~/.ssh/id_rsa", publickey = "~/.ssh/id_rsa.pub" # 这个参数可选,git2r通常能自动找到同目录下的公钥 )
- 执行推送操作,把凭证传进去:
git2r::push( repo = repo, name = "origin", refspec = "refs/heads/master", # 对应你的master分支 credentials = cred )
方法二:让git2r复用系统SSH环境(更省心)
既然你的命令行SSH已经完全正常,ssh-agent也加载了密钥,那可以让git2r直接调用系统的SSH命令,这样就不用手动指定密钥了,完全复用你已经验证过的环境:
- 先设置git全局配置,让git2r使用系统SSH:
git2r::git_config_global("core.sshCommand", "ssh")
- 之后直接执行推送就行,不需要额外指定凭证:
repo <- git2r::repository("./") git2r::push(repo, name = "origin", refspec = "refs/heads/master")
注意事项
- 一定要确保你的私钥文件权限是
600,不然git2r会拒绝读取。可以在命令行执行:chmod 600 ~/.ssh/id_rsa - 如果你的密钥设置了密码短语,方法一第一次执行会弹出输入框;方法二会自动用ssh-agent缓存的密钥,不用重复输入
- 对于git2r 0.21.0这种旧版本,方法二的兼容性更好,因为它避开了libgit2内置SSH可能存在的小问题
内容的提问来源于stack exchange,提问作者RLesur
相关产品推荐
相关产品推荐

