The git2r
package gives you programmatic access to Git repositories from R. Internally the package uses the libgit2 library which is a pure C implementation of the Git core methods. For more information about libgit2, check out libgit2’s website (http://libgit2.github.com).
Suggestions, bugs, forks and pull requests are appreciated. Get in touch.
Installation
To install the version available on CRAN:
.packages("git2r") install
To install the development version of git2r
, it’s easiest to use the devtools package:
# install.packages("devtools")
(devtools)
library("ropensci/git2r") install_github
Another alternative is to use git
and make
://github.com/ropensci/git2r.git
$ git clone https
$ cd git2r $ make install
Usage
Repository
The central object in the git2r
package is the S3 class git_repository
. The following three methods can instantiate a repository; init
, repository
and clone
.
Create a new repository
Create a new repository in a temporary directory using init
(git2r) library
#> Loading required package: methods
## Create a temporary directory to hold the repository
<- tempfile(pattern="git2r-")
path .create(path)
dir
## Initialize the repository
<- init(path)
repo
## Display a brief summary of the new repository
repo
#> Local: /tmp/Rtmp7CXPlx/git2r-1ae2305c0e8d/
#> Head: nothing commited (yet)
## Check if repository is bare
(repo) is_bare
#> [1] FALSE
## Check if repository is empty
(repo) is_empty
#> [1] TRUE
Create a new bare repository
## Create a temporary directory to hold the repository
<- tempfile(pattern="git2r-")
path .create(path)
dir
## Initialize the repository
<- init(path, bare=TRUE)
repo
## Check if repository is bare
(repo) is_bare
#> [1] TRUE
Clone a repository
## Create a temporary directory to hold the repository
<- file.path(tempfile(pattern="git2r-"), "git2r")
path .create(path, recursive=TRUE)
dir
## Clone the git2r repository
<- clone("https://github.com/ropensci/git2r", path) repo
#> cloning into '/tmp/Rtmp7CXPlx/git2r-1ae27d811539/git2r'...
#> Receiving objects: 1% (24/2329), 12 kb
#> Receiving objects: 11% (257/2329), 60 kb
#> Receiving objects: 21% (490/2329), 100 kb
#> Receiving objects: 31% (722/2329), 125 kb
#> Receiving objects: 41% (955/2329), 237 kb
#> Receiving objects: 51% (1188/2329), 574 kb
#> Receiving objects: 61% (1421/2329), 1014 kb
#> Receiving objects: 71% (1654/2329), 1350 kb
#> Receiving objects: 81% (1887/2329), 1733 kb
#> Receiving objects: 91% (2120/2329), 2614 kb
#> Receiving objects: 100% (2329/2329), 2641 kb, done.
## Summary of repository
(repo) summary
#> Remote: @ origin (https://github.com/ropensci/git2r)
#> Local: master /tmp/Rtmp7CXPlx/git2r-1ae27d811539/git2r/
#>
#> Branches: 1
#> Tags: 0
#> Commits: 320
#> Contributors: 3
#> Ignored files: 0
#> Untracked files: 0
#> Unstaged files: 0
#> Staged files: 0
## List all references in repository
(repo) references
#> $`refs/heads/master`
#> [6fb440] master
#>
#> $`refs/remotes/origin/master`
#> [6fb440] origin/master
## List all branches in repository
(repo) branches
#> [[1]]
#> [6fb440] (Local) (HEAD) master
#>
#> [[2]]
#> [6fb440] (origin @ https://github.com/ropensci/git2r) master
Open an existing repository
## Open an existing repository
<- repository(path)
repo
## Workdir of repository
(repo) workdir
#> [1] "/tmp/Rtmp7CXPlx/git2r-1ae27d811539/git2r/"
## List all commits in repository
(repo)[[1]] # Truncated here for readability commits
#> Commit: 6fb440133765e80649de8d714eaea17b114bd0a7
#> Author: Stefan Widgren <[email protected]>
#> When: 2014-04-22 21:43:19
#> Summary: Fixed clone progress to end line with newline
## Get HEAD of repository
(repo) repository_head
#> [6fb440] (Local) (HEAD) master
## Check if HEAD is head
(repository_head(repo)) is_head
#> [1] TRUE
## Check if HEAD is local
(repository_head(repo)) is_local
#> [1] TRUE
## List all tags in repository
(repo) tags
#> list()
Configuration
(repo, user.name="Git2r Readme", user.email="[email protected]")
config
## Display configuration
(repo) config
#> global:
#> core.autocrlf=input
#> local:
#> branch.master.merge=refs/heads/master
#> branch.master.remote=origin
#> core.bare=false
#> core.filemode=true
#> core.logallrefupdates=true
#> core.repositoryformatversion=0
#> remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
#> remote.origin.url=https://github.com/ropensci/git2r
#> [email protected]
#> user.name=Git2r Readme
Commit
## Create a new file
("Hello world!", file.path(path, "test.txt"))
writeLines
## Add file and commit
(repo, "test.txt")
add(repo, "Commit message") commit
#> Commit: 0a6af48cedf43208bde34230662280514e0956eb
#> Author: Git2r Readme <[email protected]>
#> When: 2014-04-22 21:44:57
#> Summary: Commit message
Included software
The C library libgit2. See
inst/AUTHORS
for the authors of libgit2.The libgit2 library has been modified, e.g. to use the R printing and error routines, and to use
runif
instead ofrand
.