2015-08-27 17 views
6

Sto usando Git come controllo di versione (attualmente il flusso di lavoro centralizzato, ma mi piacerebbe passare al flusso di lavoro di feature o gitflow). Uso RStudio/Knitr per compilare documenti PDF e vorrei sapere come posso includere automaticamente la versione Git corrente nel PDF - se funziona? In questo modo, quando qualcuno torna da me con un documento che ho dato loro, so come tornare a quel punto nel codice. Ogni suggerimento sarà molto apprezzato, grazie - Marie.Mostra versione Git in codice R

Modifica: le parole chiave sono ciò che avevo in mente, sebbene in base a questo post (gelato.unsw.edu.au/archives/git/0610/28891.html) non raccomandato. Ci sono raccomandazioni sugli script di supporto? - user1420372 solo ora

+3

Non ho familiarità con R, ma 'git rev-parse --short HEAD' otterrà la ha abbreviato l'hash SHA1 dell'ultimo commit, che puoi quindi controllare. Credo che fare 'il sistema (" git rev-parse --short HEAD ", intern = TRUE)' di R dovrebbe fare il trucco. –

+0

@WanderNauta dovresti fare una risposta. – hrbrmstr

+0

@hrbrmstr Non ho R/RStudio/Knitr quindi non ho modo di testare le mie affermazioni oltraggiose - se lo fai, e funziona davvero, sentiti libero di aggiungerlo come risposta. –

risposta

7

Fare questo solo per presentare un esempio di zuppa-a-dadi. E 'stata l'idea di @Wanter Nuata.

Ecco una piccola doc knitr:

--- 
output: pdf_document 
--- 

```{r} 
print(system("git rev-parse --short HEAD", intern = TRUE)) 
``` 

che ho in un repo git locale appena creata.

Quando ho maglia in PDF ottengo questo:

enter image description here

così si dovrebbe essere in grado di utilizzare questo per watermarking il git commit è stato generato da.

In alternativa, se sei bravo con l'aggiunta di un altro pacchetto di dipendenza ai vostri progetti, è possibile utilizzare il pacchetto git2r:

--- 
output: pdf_document 
--- 

```{r} 
library(git2r) 

repo <- repository(".") 
print(head(repo)) 
``` 

che dà:

enter image description here

+1

che dire di includere un 'system (" git --version ")'? – SabDeM

+1

bene, che fornisce la versione dell'attuale eseguibile 'git'. non so quanto sia utile. – hrbrmstr

4

Il suggerimento da usare il pacchetto git2r è davvero buono. Con poche altre funzioni, è possibile isolare lo SHA effettivo. Puoi anche riutilizzare, ad esempio, il campo Autore per ottenere lo SHA nell'intestazione del documento, se questo è interessante.

Ecco il documento R Markdown:

--- 
title: "Show Git version in R Code" 
output: html_document 
date: "`r format(Sys.time(), '%d %B, %Y')`" 
author: "SHA: `r git2r::branch_target(git2r::head(git2r::repository(getwd())))`" 
--- 

You could also put the SHA elsewhere, like in a concluding chunk along with session info. 

```{r collapse = TRUE} 
git2r::branch_target(git2r::head(git2r::repository(getwd()))) 
## ADD devtools::session_info() or sessionInfo() ?? 
``` 

che dà

enter image description here

+0

Vedere anche ['devtools ::: git_repo_sha1()'] (https://github.com/hadley/devtools/blob/f0d1c7ed3d7f30d559b62eb0060135589824c687/R/git.R#L6-L17) se è necessario che funzioni per i tag o teste staccate. – krlmlr

+0

C'è un modo per far funzionare questa risposta quando la directory di lavoro è in "my_repo/my_subdir' invece che in" my_repo'? –