在CRAN类存储库中维护和使用存档的正确方法

在CRAN类存储库中维护和使用存档的正确方法,r,repository,package,cran,R,Repository,Package,Cran,我希望为我的R包创建一个类似CRAN的存储库。例如,我正在查看packageminiCran。但是,我还需要: 将所有以前的版本(包括源代码和二进制文件)保存并组织为存档,以便 有一种干净、简单的方法可以恢复到以前的包版本(存储在归档文件中)。基本上取消归档(=将其移出归档,并更新包索引文件) 有合适的方法吗?这就是为什么。对您在这里的工作有很好的概述。您可以创建一个本地drat存储库或远程托管一个存储库,比如GitHub(这是drat的默认设置)。(它不是迷你CRAN,而是一个与R兼容的存储库

我希望为我的R包创建一个类似CRAN的存储库。例如,我正在查看package
miniCran
。但是,我还需要:

  • 将所有以前的版本(包括源代码和二进制文件)保存并组织为存档,以便
  • 有一种干净、简单的方法可以恢复到以前的包版本(存储在归档文件中)。基本上取消归档(=将其移出归档,并更新包索引文件)
  • 有合适的方法吗?

    这就是为什么。对您在这里的工作有很好的概述。您可以创建一个本地drat存储库或远程托管一个存储库,比如GitHub(这是drat的默认设置)。(它不是迷你CRAN,而是一个与R兼容的存储库,允许您使用
    install.packages()
    安装软件包)

    基本上,要构建本地drat存储库,您只需执行以下操作:

    library("drat")
    initRepo(name = "drat", basepath = "~/git")
    insertPackage("myPkg_0.5.tar.gz", "~/git/drat")
    
    这会将本地包tarball添加到本地drat存储库。默认行为是将所有tarball保留在一个顶级目录中
    install.packages()
    只查看最新版本(即每个包的最高版本tarball)。但是,可以选择创建归档目录。命令看起来基本相同:

    insertPackage("myPkg_0.5.tar.gz", "~/git/drat", action = "archive")
    
    这会将旧版本移动到类似于CRAN的归档文件夹中,只在主目录中保留新版本


    这并不能解决将存储库包“还原”到以前版本的问题,基本上是因为drat遵循CRAN的理念,即您永远不想更改存储库的历史。使用“存档”选项,您始终可以直接从存档中安装,而无需更改主drat文件夹中的内容。

    @Pascal我不这么认为,我的问题是另一个问题未涉及的内容,即软件包的版本控制,还有旧包装的维护我不认为这是CRAN mirror的工作方式。那么它应该如何工作呢?你有什么参考资料吗?我发现关于处理归档包的所有文档都非常难以捉摸。如何在我所在组织的所有计算机上还原软件包版本?我不确定,但我想CRAN mirror应该为不同(受支持)版本的R提供任何软件包的最后版本。但是,您可以尝试使用
    下载.packages
    工具::write_packages
    ,以及
    选项(repos=c(CRAN=…)
    。但由于归档包只是源文件(未编译),对于非*nix R版本来说可能会比较复杂。事实上,我的计划是将编译后的版本也保存在类似于CRAN的存储库中