我正在使用packrat为我的R项目设置一个git工作流程。每次我packrat::snapshot()
我的工作区,文件packrat.lock
都会随着新的包/版本等而改变,但它也会改变每个包的哈希行,这在检查文件差异时看起来有点烦人从一次提交到另一次提交。
这个哈希真的有必要吗?如果没有,有没有办法禁用它?
答案 0 :(得分:0)
哈希由hash()
库中的隐藏packrat
函数生成,并且用作包一致性检查。
该算法基于包tarball中包含的md5sum
文件生成一个DESCRIPTION
,但涉及其他逻辑,请参见packrat/R/cache.R
源中的lines #103-#107
在Github。
为了获得packrat
期望在packrat.lock
文件中找到的HASH,必须直接调用hash()
函数。此功能在已编译的程序包中不公开,因此访问它的唯一方法是使用packrat
源。
packrat
库源代码的副本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'))
这应该返回4cc8883584b955ed01f38f68bc03af6d
的正确哈希值。
我不知道packrat
中的任何允许您禁用HASH检查的选项。如果您的目标是手动修改packrat.lock
文件以更改软件包版本,则可以通过执行此技巧来实现。
这可以帮助克服一些较小的依赖问题。但是,有两个危险: