20

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

我应该在我的 git repo 中至少包含哪些文件(例如,packrat.lock)?

4

1 回答 1

40

您可以选择使用您希望项目可用的包的源 tarball 及其版本来设置一个类似 CRAN 的外部存储库。但是,默认行为是接下来查看 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 脚手架,包括源 tarball 等都在以下目录下创建:PackageName/packrat/. 2.packrat/lib*/添加到您的 .gitignore 文件中。

所以从这里,我们可以看到下面的任何东西packrat/lib*/都不需要提交给你的 git-repo。这留下了以下 3 个要提交的文件:

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

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

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

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

于 2016-08-15T03:45:01.650 回答