如何获取R语言中指定对象定义的Git历史记录?
需求:追踪R包函数的Git修改历史
在开发R包时,我经常需要确认某个函数近期是否被修改过——它可能在不同脚本间迁移,代码或文档也可能有变更。
我希望能实现一个git_history(my_function, branch = "main")函数,调用后返回包含以下字段的数据框:
commit_id:提交IDcommit_text:提交说明author:提交作者timestamp:提交时间戳file:函数所在文件code:对象定义(理想情况下包含roxygen2注释块,非必需)
借助{diffobj}包可以轻松查看这些版本间的代码差异。如果能支持所有对象自然最好,但仅针对带有srcref的函数实现就能满足95%的需求。另外如果能额外添加对象名字段并整合到单个数据框会更理想,但不确定实现成本是否过高。
我不想重复造轮子,先询问是否有现成方案;如果没有满意的答复,会自行实现后补充。
我的实现思路
- 调用Git命令获取指定分支的提交列表
- 遍历每个提交,将其检出到临时文件夹
- 在每次迭代中,通过
getParseData(parse(file = ))解析所有文件并提取对象定义,或用正则匹配,或加载文件后提取srcrefs(但后一种方法无法获取roxygen2内容和非函数定义) - 为每个提交(若覆盖所有对象定义则为每个对象)构建数据框的一行记录
- 仅保留连续重复代码的最早版本
- 清理临时文件夹,最终返回数据框
我认为需要一个基于R与Git的、感知语言特性的版本控制实现模板,在此记录相关内容。
内容的提问来源于stack exchange,提问作者moodymudskipper
相关产品推荐
相关产品推荐

