我正在使用packrat为我的R项目设置git工作流。每次我使用packrat::snapshot()
来快照我的工作区时,文件packrat.lock
会随着新的包/版本等内容而改变,但它还会更改每个包的Hash行,在检查文件差异以查看从一个提交到另一个提交有哪些变化时,这有点麻烦。
这个Hash真的有必要吗?如果不是,有没有办法禁用它?
我正在使用packrat为我的R项目设置git工作流。每次我使用packrat::snapshot()
来快照我的工作区时,文件packrat.lock
会随着新的包/版本等内容而改变,但它还会更改每个包的Hash行,在检查文件差异以查看从一个提交到另一个提交有哪些变化时,这有点麻烦。
这个Hash真的有必要吗?如果不是,有没有办法禁用它?
哈希是由packrat
库中的隐藏hash()
函数生成的,它用作软件包一致性检查。
该算法基于软件包tarball中包含的DESCRIPTION
文件生成一个md5sum
,但还涉及其他逻辑,请参见Github上packrat/R/cache.R
源代码中的lines #103-#107
。
为了获取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
中是否有任何选项可以禁用哈希检查。如果您的目标是手动修改packrat.lock
文件以更改软件包版本,则可以通过执行此技巧来实现。
这可能有助于克服一些较小的依赖关系问题。但是,存在两个危险: