3

我有一个本地 GitLab 帐户,其中包含可以通过以下方式安装的 R 包:

devtools::install_git( 
  url = "http://my-gitlab/my-projects/package",
  credentials = git2r::cred_user_pass("user", "pass")
)

当我运行renv::init()包源时未知。入门文章确实提供了有关如何设置函数来处理私有存储库的详细信息,但在使用devtools和时我无法为 GitLab 弄清楚git2r::cred_user_pass。我可以将GIT_USER和存储GIT_PASSWORD在一个.Renviron文件中,但我不确定如何使用这些凭据强制使用该init功能。devtools::install_git我确实尝试过,但后来出现错误:

fatal: could not read Username for 'http://my-gitlab': No such device or address

他们提供的所有示例选项都使用 GitLab 令牌进行身份验证:

# use a named list directly
options(renv.auth = list(
  MyPackage = list(GITHUB_PAT = "<pat>")
))

也许有一种更好的方法可以从本地 GitLab 存储库安装,并且可以更好地使用renv

4

2 回答 2

5

对于其他有同样问题的人,这对我有用(见这里):

  • 在 GITLAB 中创建一个 PAT,确保将 SCOPE 设置为api. 注意:我不确定这一定是“api”我没有检查所有选项,但它对我有用
  • 使用 PAT 将 PAT 设置为环境变量Sys.setenv(GITLAB_PAT = <...>)
  • 将 gitlab 主机服务器设置为使用options(renv.config.gitlab.host = "http://my-gitlab-server"). 注意:我必须包含“http://”才能使其正常工作。
  • renv::install("gitlab::project/package")
  • 这对我不起作用:renv::install("gitlab@my-gitlab-server::project/package")
于 2020-08-12T09:07:54.487 回答
4

当我运行 renv::init() 时,包源是未知的。

renv根据包的DESCRIPTION文件推断包的源,该文件(对于自定义遥控器)通常由安装函数本身进行事后注释。我怀疑install_git()没有以预期的方式之一注释包renv,因此renv无法推断包源。

DESCRIPTION您可以尝试通过检查文件来确认这一点;例如,转储其内容的快速方法是:

writeLines(readLines(system.file("DESCRIPTION", package = <package>)))

并检查诸如RemoteType: git查看包源是否确实已注释的字段。


值得一提的是,它看起来像是 的devtools::install_git()委托remotes::install_git(),并且可以通过该remotes.git_credentials选项设置默认的 Git 凭据。例如:

options(remotes.git_credentials = git2r::cred_user_pass("user", "pass"))

最终,renv依赖于使用私有访问令牌(通过GITLAB_PATGitLab 的环境变量访问)来使用私有存储库进行身份验证。

您是否能够使用renv::install()with GITLAB_PATset 成功安装软件包?例如:

Sys.setenv(GITLAB_PAT = <...>)
renv::install("gitlab::user/project")

这是我推荐的工作流程,也应该得到开箱即用的remotes/包的支持。devtools

于 2020-07-08T21:14:38.347 回答