You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用git2r包通过SSH推送Git仓库?

使用git2r通过SSH执行推送操作的解决方案

嘿,我之前在Ubuntu Xenial上用git2r 0.21.0版本时也碰到过一模一样的问题——本地命令行和RStudio的SSH操作都完全正常,但就是摸不清怎么在git2r里搞定推送。其实核心就是让git2r正确识别你已经配置好的SSH密钥,下面给你两种靠谱的解决方法:

方法一:直接指定SSH密钥凭证

这种方法适合你想明确控制密钥使用的场景,步骤非常清晰:

  1. 首先在R中打开你的本地仓库:
repo <- git2r::repository("path/to/your/project")
# 如果当前工作目录就是项目根目录,直接用"./"就行
  1. 创建SSH凭证对象,指定你的私钥路径(默认是~/.ssh/id_rsa):
cred <- git2r::cred_ssh_key(
  privatekey = "~/.ssh/id_rsa",
  publickey = "~/.ssh/id_rsa.pub" # 这个参数可选,git2r通常能自动找到同目录下的公钥
)
  1. 执行推送操作,把凭证传进去:
git2r::push(
  repo = repo,
  name = "origin",
  refspec = "refs/heads/master", # 对应你的master分支
  credentials = cred
)

方法二:让git2r复用系统SSH环境(更省心)

既然你的命令行SSH已经完全正常,ssh-agent也加载了密钥,那可以让git2r直接调用系统的SSH命令,这样就不用手动指定密钥了,完全复用你已经验证过的环境:

  1. 先设置git全局配置,让git2r使用系统SSH:
git2r::git_config_global("core.sshCommand", "ssh")
  1. 之后直接执行推送就行,不需要额外指定凭证:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:26:52