2017-02-04 82 views
4

我正在寫一個帶有rmarkdown的分析報告,並希望有一個「文檔版本」部分,我將在其中指出文檔的不同版本和所做的更改。如何在rmarkdown中打印git歷史記錄?

我沒有手動寫下它,而是考慮使用git歷史記錄並將它自動插入到markdown文檔中(在表格中格式化)。

我該怎麼做?可能嗎?

+0

我不明白爲什麼這個問題是「脫離主題」。我沒有要求使用工具,書籍或教程:我知道我想使用什麼工具(git和rmarkdown)。我只是問如何讓兩者合作。我得到的非常好的答案正是這樣解釋的,我認爲這個問題可能對其他人有用。 – Ben

回答

3

安裝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對象,這是很好的。從數據框中創建一個降價表應該是微不足道的!

2

您可以手動轉換git的日誌,pretty=format [1]

喜歡的東西

git log --reverse --pretty=format:'| %H | %s |' 

這將輸出這樣的事情降價:

| a8d5defb511f1e44ddea21b42aec9b03ee768253 | initial commit | 
| fdd9865e9cf01bd53c4f1dc106ee603b0a730f48 | fix tests | 
| 10b58e8dd9cf0b9bebbb520408f0b342df613627 | add Dockerfile | 
| d039004e8073a20b5d6eab1979c1afa213b78fa3 | update README.md | 

1:https://git-scm.com/docs/pretty-formats

+0

這是一個好主意,但它並不是從我的rmarkdown文檔中調用的,我希望在我生成小插圖時自動完成。 – Ben

+0

您必須通過shell中的escape和'system'來調用它,捕獲輸出。 – Spacedman

相關問題