【问题标题】:R: How can I install a specific release by install_github()?R:如何通过 install_github() 安装特定版本?
【发布时间】:2017-03-03 22:23:42
【问题描述】:

如果当前版本的软件包出现一些错误,用户可能更愿意安装特定版本(例如版本 1.0.1)。什么样的 R 代码可以用来实现这一点?

以发布最新的OhdsiRTools R 包为例:

https://github.com/OHDSI/OhdsiRTools/tree/v1.0.1

命令类似于:

install_github("OHDSI/OhdsiRTools", ref = 'v1.0.1')

上面的代码不正确。它仅适用于分支(例如,masterdevA)。但是devtools 包具有引用版本的功能。

理想情况下,我会通过标签引用版本(但带有提交 ID 的解决方案也可以)。

额外奖励:哪些代码可以安装“最新”版本。 (但认为这是一个额外的问题。关于的问题是主要的)

【问题讨论】:

  • 这在过去可能是个问题(我不知道),但截至 2021 年 11 月,ref = 语法也适用于标签。

标签: r devtools


【解决方案1】:

您需要将发布的标签直接附加到存储库参数的名称上。所以,username/repo@releasetag 会起作用。只有在需要引用 git 仓库的特定分支时才使用参数ref = "devA"

对于你的例子,关于OhdsiRTools v1.0.1,我们有

我们有:

devtools::install_github("OHDSI/OhdsiRTools@v1.0.1")

编辑

在玩弄devtools 源之后,我注意到有人可以通过以下方式请求最新的源:

username/repo@*release

因此,您可以使用:

devtools::install_github("OHDSI/OhdsiRTools@*release")

结束编辑

已过时,请参阅编辑

不幸的是,要获得最新的发布标签,这项工作有点复杂,因为它需要解析来自 GitHub API 的响应。如果您确实需要标记版本,这里有一些注释...您必须从以下位置解析 JSON:

https://api.github.com/repos/<user>/<repo>/releases/latest

使用RJSONIOjsonliterjson

从以下位置提取"tag_name"

{
  "url": "https://api.github.com/repos/OHDSI/OhdsiRTools/releases/2144150",
  "assets_url": "https://api.github.com/repos/OHDSI/OhdsiRTools/releases/2144150/assets",
  "upload_url": "https://uploads.github.com/repos/OHDSI/OhdsiRTools/releases/2144150/assets{?name,label}",
  "html_url": "https://github.com/OHDSI/OhdsiRTools/releases/tag/v1.0.1",
  "id": 2144150,
  "tag_name": "v1.0.1",
  "target_commitish": "master",
  "name": "Minor bug fix",
  "draft": false,
  "author": {
    "login": "schuemie",
    "id": 6713328,
    "avatar_url": "https://avatars.githubusercontent.com/u/6713328?v=3",
    "gravatar_id": "",
    "url": "https://api.github.com/users/schuemie",
    "html_url": "https://github.com/schuemie",
    "followers_url": "https://api.github.com/users/schuemie/followers",
    "following_url": "https://api.github.com/users/schuemie/following{/other_user}",
    "gists_url": "https://api.github.com/users/schuemie/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/schuemie/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/schuemie/subscriptions",
    "organizations_url": "https://api.github.com/users/schuemie/orgs",
    "repos_url": "https://api.github.com/users/schuemie/repos",
    "events_url": "https://api.github.com/users/schuemie/events{/privacy}",
    "received_events_url": "https://api.github.com/users/schuemie/received_events",
    "type": "User",
    "site_admin": false
  },
  "prerelease": false,
  "created_at": "2015-11-18T00:55:28Z",
  "published_at": "2015-11-18T06:35:57Z",
  "assets": [

  ],
  "tarball_url": "https://api.github.com/repos/OHDSI/OhdsiRTools/tarball/v1.0.1",
  "zipball_url": "https://api.github.com/repos/OHDSI/OhdsiRTools/zipball/v1.0.1",
  "body": "Fixed bug in `convertArgsToList ` function."
}

以上取自https://api.github.com/repos/OHDSI/OhdsiRTools/releases/latest

【讨论】:

  • 感谢您改进答案。我猜第一个解决方案 (devtools::install_github("OHDSI/OhdsiRTools@v1.0.1")) 在您编辑后已更新,因为它使用 @ 语法,但在您的编辑中,您还包含一个星号 (devtools::install_github("OHDSI/OhdsiRTools@*release")) 它是什么? @* 还是 @?有没有星号?
  • @Dannid 两者都是正确的。 @v1.0.1 是硬编码的,而后者 @*release 自动获取最新版本,例如v1.0.1。不过,自发布此问题以来,此软件包的 最新 版本尚未更新。不幸的是,只添加了 repo 的标签,c.f. github.com/OHDSI/OhdsiRTools/releases
【解决方案2】:

对于来到这里寻找如何从特定提交 SHA 安装的任何人来说,这很简单:

remotes::install_github("username/repository@commitSHA")

示例

从 github 上的 'commits' 页面查找要安装的提交的 SHA:

在这种情况下,提交 SHA 是:8bc79ec6dd57f46f753cc073a3a50e0921825260,所以很简单:

remotes::install_github("wilkelab/ggtext@8bc79ec6dd57f46f753cc073a3a50e0921825260")

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多