将 R 与 git 和 packrat 一起使用

Using R with git and packrat

我使用 git 有一段时间了,但最近才开始使用 packrat。我希望我的存储库是独立的,但同时我不想包含可用的 CRAN 包。似乎一旦在带有 packrat 的项目中打开 R,它就会尝试使用项目库中的包;如果它们不可用,那么它将尝试从项目库中的 src 安装;如果它们不可用,它将查看安装在该计算机中的库。如果计算机中没有图书馆;接下来会看 CRAN 吗?

我的 git 存储库中至少应包含哪些文件(例如 packrat.lock)?

您可以选择设置一个类似 CRAN 的外部存储库,其中包含您希望可用于您的项目的包源 tarballs 及其版本。但是,默认行为是接下来查看 CRAN,正如您在问题中所确定的那样。查看 packrat.lock 文件,您会看到对于您在 packrat 中使用的每个包,都有一个名为 source: CRAN 的选项(如果您是从 CRAN 下载文件的)。

当您有本地存储的包源文件时,所述包的锁定内容更改为以下内容:

Package: FooPackage Source: source Version: 0.4-4 Hash: 44foo4036fb68e9foo9027048d28 SourcePath: /Users/MyName/Documents/code/myrepo/RNetica

我对你的最后一个问题有点不清楚:What files should I include in my git repo as a minimum (e.g., packrat.lock)? 但我将把它作为 a) 应该为 packrat 提供哪些文件的组合 运行,以及 b ) 这些文件中的哪些应该提交给 git-repo。为了回答第一个问题,我通过在现有 R 项目上初始化 packrat 来说明。

当您 运行 packrat::init() 时,会发生两件重要的事情(除其他外): 1. 所有 packrat 脚手架,包括源码 tarballs 等都创建于:PackageName/packrat/。 2. packrat/lib*/ 添加到您的 .git 忽略文件。

因此,我们可以看出 packrat/lib*/ 下的任何内容都不需要提交给您的 git-repo。这留下了以下 3 个文件要提交:

  1. packrat/init.R
  2. packrat/packrat.lock
  3. packrat/packrat.opts

packrat.lock 需要通过版本控制系统与他人协作;它有助于使您的私人图书馆保持同步。 packrat.opts 允许您为 packrat 指定不同的项目特定选项。该文件是使用 get_optsset_opts 自动生成的。将此文件提交到 git-repo 将确保为所有协作者保留您指定的任何选项。要提交给回购的最终文件是 .Rprofile。该文件告诉 R 使用私有包库(当 R 是从项目目录中获取时tar)。

根据您的需要,您可以选择是否将源 tar 球提交到存储库。如果您不希望它们在您的 git-repo 中可用,您只需将 packrat/src/ 添加到 .gitignore。但是,这将意味着访问 git-repo 的任何人都无法访问包源代码,文件将从 CRAN 下载,或者从 packrat.lock 文件中源行指定的任何地方下载.

根据您的问题,听起来您可能需要将 packrat/src/ 文件夹内容提交到您的存储库。