【问题标题】:Versioning an R package with git/github?使用 git/github 对 R 包进行版本控制?
【发布时间】:2017-12-17 03:09:50
【问题描述】:

我无法确定在 github 上更新我的 R 包版本号的工作流程,以避免错误地命名为“中间”版本。这就是我现在要做的。

  • 提交并推送版本 1.0.0,并将发布设置为 1.0.0
  • 在不更改说明文件的情况下提交并推送一些错误修复等
  • 最终决定我应该将版本提升到 1.0.1,然后提交并推送更新的说明,然后设置新版本。

这样做的问题是,如果有人(比如我)在我做了一些修复之后但在我升级版本之前从 github 下载,他们认为他们拥有的版本是 1.0.0(因为那仍然是在说明中),但它确实介于 1.0.0 和 1.0.1 之间。

问题中似乎讨论了这样的事情 “Is it possible to add a version number using git / github”,但不是特定于 R 的,所以我无法判断它是否在谈论相同的事情,或者如何为 R 实现。

还有一个问题“Automating version increase of R packages”,它有一个自动更新它的答案,尽管在 cmets 中,我们看到 Hadley“基本上没有出售自动递增版本的好处”(https://github.com/hadley/devtools/issues/501)。那里的代码也依赖于 Make 所以不是跨平台的。

【问题讨论】:

  • 除非我在 github 上安装标签 (devtools::install_github("akhilnairamey/somerepo@v1.0.0")),否则我通常假设我将拥有该软件包的开发版本(即可能不稳定)。我还通过 pull req 对我的包 master 分支进行了更改(即不直接推送到 master [并进一步保护 master 以确保这一点]),并始终在 pull req 中包含版本提升。也不知道最佳实践,但这似乎对我有用。有兴趣听到更多答案
  • 我见过许多开发人员发布标准的点三元组(例如 1.0.0)。紧接着,DESCRIPTION 文件版本更新为 1.0.0.9000 之类的内容,表示中间标记版本。 (通过“发布”,我的意思是要么发布到 CRAN,或者至少在 git 中进行标记。)这样,您立即知道问题中引用的版本是已发布版本还是手动安装的开发版本. (“9000”通常是静态的,尽管我想在每次提交时增加它是可行的……维护起来很麻烦,IMO,但它可能有用。)

标签: r github


【解决方案1】:

我强烈建议遵循Git Flow 分支模型,其中:

  • master 分支包含最新稳定版本的代码。使用版本格式x.y.z
  • develop 分支包含正在开发的代码。使用版本格式x.y.z-9000

master 成为 GitHub 上的默认结帐分支。这样,用户在使用以下方式安装 R 包时将始终获得最新版本:

install_github("owner/repos")

想要安装开发者版本的用户,可以使用:

install_github("owner/repos@develop")

接下来,如果您的包裹也在 CRAN 上,请严格要求 master 准确反映 CRAN 上的内容。这样用户无论是否使用都安装相同的软件包版本:

install.packages("repos")

install_github("owner/repos")

这样,无论人们访问您的 CRAN 页面还是 GitHub 页面,他们都会看到相同的信息。此外,您可以放心,所有用户都会看到相同的稳定信息/版本,即使您标记更新develop(只有精明的用户会知道这个分支)。

接下来,当你发布新版本时,你可以git tag他们的版本号,例如

git checkout master
git tag 1.2.3
git push --tags

这样用户就可以安装他们想要的任何版本,例如

install_github("owner/repos@1.2.3")

用于此的工具? git flow 扩展是协调上述内容的绝佳工具,例如

git checkout develop
git flow release start 1.2.4
emacs DESCRIPTION ## Update version x.y.z-9000 -> x.y.z+1
R CMD build ...
R CMD check ...
git flow release finish 1.2.4
git checkout master
git push
git push --tags
git checkout develop
emacs DESCRIPTION ## Bump version to x.y.(z+1)-9000
git commit -am "Bump develop version [ci skip]"
git push

两年来我每天都在使用上面的东西——我无法想象不使用它。

【讨论】:

  • 啊,好老的 Vincent Driessen Git Flow 方法!好帖子!
  • 在 RStudio 中是否有任何“精益”方式来实现自动化?
猜你喜欢
  • 2014-09-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2019-05-02
相关资源
最近更新 更多