使用devtools :: install_git从Gitlab安装非公共包

Ben*_*min 32 r devtools gitlab

我的机构最近为我们安装了GitLab.我已经想出如何使用GitLab服务器安装R软件包,devtools::install_git只要项目是公共的,它就可以工作.

#* When modeltable project has Public status
devtools::install_git('https://mini-me2.lerner.ccf.org/nutterb/modeltable.git')
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个列为"内部"或"私有"的软件包,我无法在没有某种形式的身份验证的情况下安装软件包.到目前为止,我还没有想出如何通过URL传递身份验证.有没有人有从GitLab下载包的经验?

#* After changing the 'modeltable' project to Private status
devtools::install_git('https://mini-me2.lerner.ccf.org/nutterb/modeltable.git')
Preparing installation of modeltable using the Git-URL: https://mini-me2.lerner.ccf.org/nutterb/modeltable.git
'/usr/bin/git'clone --depth 1 --no-hardlinks https://mini-me2.lerner.ccf.org/nutterb/modeltable.git /tmp/Rtmp5aj1cU/file24493dc03a32
Error: There seems to be a problem retrieving this Git-URL.
Run Code Online (Sandbox Code Playgroud)

Raf*_*yas 20

我强烈建议您使用SSH路由,以下内容适用于此.我发现实现SSH的飞跃很容易,尤其是R和RStudio.我在下面的例子中使用Windows.我在实践中使用的代码编辑全部大写.

creds = git2r::cred_ssh_key("C:\\Users\\MYSELF\\.ssh\\id_rsa.pub",
                            "C:\\Users\\MYSELF\\.ssh\\id_rsa")
devtools::install_git("git@gitlab.WORKDOMAIN.com:GITLABGROUP/PACKAGE.git",
                      credentials = creds)
Run Code Online (Sandbox Code Playgroud)

两个快速补充评论:

  • git2r是用devtools导入的,你不需要单独安装它.
  • 另外我认为这不应该提及,但是脚本中的明文密码是一个非常糟糕的主意.


jst*_*sta 18

你可以试试devtoolsgetPass包的组合.

https://github.com/wrathematics/getPass

devtools::install_git(
  "https://gitlab.com/foo/bar.git", 
  credentials = git2r::cred_user_pass("uname", getPass::getPass())
)
Run Code Online (Sandbox Code Playgroud)

uname你的Gitlab用户名在哪里.

  • 那你不是以明文形式通过网络发送密码吗? (2认同)
  • 用于屏蔽密码或存储凭证的goto实际上是使用`getPass`和`openssl`包来加密存储的凭证,所以我可以在会话期间重复使用它们,但我只在需要时解密.但是对于身份验证,我觉得非常不喜欢使用`https` (2认同)

Ben*_*min 9

Per Ciro的评论,使用身份验证

https://user:password@domain.com/user/repo.git
Run Code Online (Sandbox Code Playgroud)

诀窍.所以完整的电话会是

devtools::install_git('https://user:password@mini-me2.lerner.ccf.org/nutterb/modeltable.git')
Run Code Online (Sandbox Code Playgroud)

请注意,以这种方式传递用户名和密码可能存在安全问题.我没有完全了解这些担忧.这对我的目的来说效果很好,因为我在我公司的网络上进行了身份验证,甚至可以看到GitLab服务器.