我正在使用 packrat 为我的 R 项目设置一个 git 工作流。每次我packrat::snapshot()
在我的工作空间中,文件packrat.lock
都会随着新的包/版本等而更改,但它也会更改每个包的哈希行,这在检查文件差异以查看从一个提交到另一个提交时发生了什么变化时有点烦人。
这个Hash真的有必要吗?如果没有,有什么办法可以禁用它?
我正在使用 packrat 为我的 R 项目设置一个 git 工作流。每次我packrat::snapshot()
在我的工作空间中,文件packrat.lock
都会随着新的包/版本等而更改,但它也会更改每个包的哈希行,这在检查文件差异以查看从一个提交到另一个提交时发生了什么变化时有点烦人。
这个Hash真的有必要吗?如果没有,有什么办法可以禁用它?
哈希由库中的隐藏hash()
函数生成packrat
,用作包一致性检查。
该算法md5sum
基于DESCRIPTION
包 tarball 中包含的文件生成一个,但还涉及其他逻辑,请参见Githublines #103-#107
的packrat/R/cache.R
源代码。
为了获得packrat
期望在packrat.lock
文件中找到的 HASH,必须直接调用该hash()
函数。这个函数没有暴露在编译包中,所以访问它的唯一方法是使用packrat
源代码。
packrat
从 CRAN获取具有正确版本的库源的副本packrat-0.5.0
)以下几行演示了如何为包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'))
这应该返回正确的 HASH 4cc8883584b955ed01f38f68bc03af6d
。
我不知道有任何选项packrat
可以让您禁用 HASH 检查。如果您的目标是手动修改packrat.lock
文件以更改软件包版本,那么执行此技巧当然是可能的。
这可以帮助克服一些小的依赖问题。但是,有两个危险: