packrat.lock 中的哈希值是什么?

gsm*_*fra 5 git hash r package-managers packrat

我正在使用 Packrat 为我的 R 项目设置一个 git 工作流程。每次packrat::snapshot()我的工作区,文件都会packrat.lock随着新的包/版本等而改变,但它也会改变每个包的哈希行,这在检查文件差异以查看从一个提交到另一个提交的变化时有点烦人。

这个Hash真的有必要吗?如果没有,有什么办法可以禁用它吗?

小智 0

hash()哈希值由库中的隐藏函数生成packrat,用作包一致性检查。

该算法md5sum基于DESCRIPTIONtarball 包中包含的文件生成一个 ,但还涉及其他逻辑,请参阅lines #103-#107Githubpackrat/R/cache.R上的源代码。

为了获得期望packrat在文件中找到的哈希值,必须packrat.lock直接调用该函数。hash()该函数未在编译包中公开,因此访问它的唯一方法是使用packrat源代码。

  1. packrat从 CRAN 获取具有正确版本的库源的副本
  2. 将其解压到一个文件夹中(在我的示例中是packrat-0.5.0
  3. 启动 R 会话

BH-1.66.0-1以下几行演示了如何为包( )生成哈希4cc8883584b955ed01f38f68bc03af6d

# md5sum() function is neeeded
library(tools)

# relevant source code files are loaded
source('packrat-0.5.0/R/utils.R') # readDcf() function
source('packrat-0.5.0/R/cache.R') # packrat's hash() function

# execute the hash() function on the DESCRIPTION file in the package
print(hash('/usr/local/lib/R/site-library/BH/DESCRIPTION'))
Run Code Online (Sandbox Code Playgroud)

这应该返回正确的 HASH 4cc8883584b955ed01f38f68bc03af6d

我不知道有任何选项packrat可以让您禁用哈希检查。如果您的目标是手动修改文件packrat.lock以更改软件包版本,那么通过执行此技巧当然是可能的。

这可以帮助克服一些小的依赖性问题。然而,存在两个危险:

  1. 这样的软件包版本更改可能会引发一系列依赖项升级要求
  2. 由于兼容性问题,您的应用程序中出现错误