簡體   English   中英

將 renv 用於私有 GitLab package

[英]Use renv for private GitLab package

我有一個本地 GitLab 帳戶和一個 R package 可以通過以下方式安裝:

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

當我運行renv::init()時,package 源是未知的。 入門文章確實提供了有關如何設置函數以處理私有存儲庫的詳細信息,但在使用devtoolsgit2r::cred_user_pass 我可以將GIT_USERGIT_PASSWORD存儲在.Renviron文件中,但我不確定如何使用這些憑據將init function 強制用戶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一起使用?

當我運行 renv::init() 時,package 源是未知的。

renv根據其DESCRIPTION文件推斷包的源,該文件(對於自定義遙控器)通常由安裝 function 本身進行事后注釋。 我懷疑install_git()沒有以 renv 預期的方式之一注釋renv ,因此renv無法推斷 package 源。

您可以嘗試通過檢查DESCRIPTION文件來確認這一點; 例如,轉儲其內容的快速方法是:

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

並檢查諸如RemoteType: git之類的字段,以查看 package 源是否確實已被注釋。


對於它的價值,它看起來像devtools::install_git()委托給remotes::install_git() ,並且可以通過remotes.git_credentials選項設置默認的 Git 憑據。 例如:

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

但最終, renv依賴於使用私有訪問令牌(通過 GitLab 的GITLAB_PAT環境變量訪問)來對私有存儲庫進行身份驗證。

您是否能夠使用設置了 GITLAB_PAT 的renv::install()成功安裝GITLAB_PAT 例如:

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

這是我推薦的工作流程,並且開箱即用的remotes / devtools包也應該支持。

對於其他有同樣問題的人,這對我有用(見這里):

  • 在 GITLAB 中創建一個 PAT,確保將 SCOPE 設置為api 注意:我不確定這一定是“api”我沒有檢查所有選項,但它對我有用
  • 使用Sys.setenv(GITLAB_PAT = <...>)將 PAT 設置為環境變量
  • 使用options(renv.config.gitlab.host = "http://my-gitlab-server")將 gitlab 主機服務器設置為選項。 注意:我必須包含“http://”才能使其正常工作。
  • 運行renv::install("gitlab::project/package")
  • 這對我不起作用: renv::install("gitlab@my-gitlab-server::project/package")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM