我正在写一个带有rmarkdown的分析报告,并希望有一个“文档版本”部分,我将在其中指出文档的不同版本和所做的更改。如何在rmarkdown中打印git历史记录?
我没有手动写下它,而是考虑使用git历史记录并将它自动插入到markdown文档中(在表格中格式化)。
我该怎么做?可能吗?
我正在写一个带有rmarkdown的分析报告,并希望有一个“文档版本”部分,我将在其中指出文档的不同版本和所做的更改。如何在rmarkdown中打印git历史记录?
我没有手动写下它,而是考虑使用git历史记录并将它自动插入到markdown文档中(在表格中格式化)。
我该怎么做?可能吗?
安装git2r
,https://github.com/ropensci/git2r那么你可以做的东西,如:
> r = repository(".")
> cs = commits(r)
> cs[[1]]
[02cf9a0] 2017-02-02: uses Rcpp attributes instead of inline
所以现在我有这个回购所有提交的清单。您可以根据您对文档的需求从每个提交和格式中获取信息。
> summary(cs[[1]])
Commit: 02cf9a0ff92d3f925b68853374640596530c90b5
Author: barryrowlingson <[email protected]>
When: 2017-02-02 23:03:17
uses Rcpp attributes instead of inline
11 files changed, 308 insertions, 151 deletions
DESCRIPTION | - 0 + 2 in 2 hunks
NAMESPACE | - 0 + 2 in 1 hunk
R/RcppExports.R | - 0 + 23 in 1 hunk
R/auxfunctions.R | - 1 + 1 in 1 hunk
R/skewt.r | - 0 + 3 in 1 hunk
R/update_params.R | - 1 + 1 in 1 hunk
R/update_params_cpp.R | -149 + 4 in 2 hunks
src/.gitignore | - 0 + 3 in 1 hunk
src/RcppExports.cpp | - 0 + 76 in 1 hunk
src/hello_world.cpp | - 0 + 13 in 1 hunk
src/update_params.cpp | - 0 +180 in 1 hunk
所以,如果你只是想要时间和提交消息,那么你可以抓住它的对象。
> cs[[3]]@message
[1] "fix imports etc\n"
> cs[[3]]@[email protected]
2017-01-20 23:26:20
我不知道是否有适当的存取函数,而不是使用@ -notation来获取插槽。需要阅读的文档多一点...
您可以从您提交使数据帧是这样的:
> do.call(rbind,lapply(cs,function(cs){as(cs,"data.frame")}))
该日期转换为POSIXct对象,这是很好的。从数据框中创建一个降价表应该是微不足道的!
您可以手动转换git的日志,pretty=format
[1]
喜欢的东西
git log --reverse --pretty=format:'| %H | %s |'
这将输出这样的事情降价:
| a8d5defb511f1e44ddea21b42aec9b03ee768253 | initial commit |
| fdd9865e9cf01bd53c4f1dc106ee603b0a730f48 | fix tests |
| 10b58e8dd9cf0b9bebbb520408f0b342df613627 | add Dockerfile |
| d039004e8073a20b5d6eab1979c1afa213b78fa3 | update README.md |
我不明白为什么这个问题是“脱离主题”。我没有要求使用工具,书籍或教程:我知道我想使用什么工具(git和rmarkdown)。我只是问如何让两者合作。我得到的非常好的答案正是这样解释的,我认为这个问题可能对其他人有用。 – Ben