Provides Access to Git Repositories

Interface to the 'libgit2' library, which is a pure C implementation of the 'Git' core methods. Provides access to 'Git' repositories to extract data and running some basic 'Git' commands.


git2r 0.23.0


  • Updated the bundled libgit2 source code to v0.27.3 (504bd54).


  • On macOS, git2r no longer enables SSH transport by default. This is due to the complexity to build the dependencies for SSH transport in an R package when macOS no longer ships the OpenSSL headers. However, you can install git2r from source on macOS (see the 'R Installation and Administration' manual) with SSH transport enabled if you first install the libgit2 library, for example, using the Homebrew package manager. Another possibility is to let the build configuration automatically download the libgit2 library from the Homebrew package manager with:

    install.packages('git2r', type='source', configure.vars='autobrew=yes')

git2r 0.22.1


  • Added the 'git_config_files' method to locate configuration files.

  • Added the 'stash_pop' method to apply a single stashed state from the stash list and remove it from the list if successful.

  • Added the 'stash_apply' method to apply a single stashed state from the stash list.


  • Updated the bundled libgit2 source code to v0.27.2 (8d36dc6).

  • git2r can now build against a system installation of libgit2 (Elliott Sales de Andrade in PR #345, #344 and #336).

  • Refactoring of the configuration scripts to use a prebuilt libgit2 on macOS and Windows (Thanks Jeroen).

  • Ensure that git2r writes the config file to the correct location on Windows (John Blischak in PR #320).

  • Better default location to find ssh keys in 'cred_ssh_key()' (Ian Lyttle in PR #317).


  • If a merge results in no change, the returned 'git_merge_result' now returns 'FALSE' for 'fast_forward' and 'conflicts' and 'NA' for 'sha'. Previously it returned 'logical(0)' for 'fast_forward' and 'conflicts' and 'character(0)' for 'sha'.


  • Changed from S4 classes to S3 classes to simplify the design and facilitate future development.

  • Removed the trailing slash from the directory name when reporting repository path or workdir.

  • Removed the 'libgit2_sha' method. Use the 'libgit2_version' method instead.

  • Changed the 'stash_drop' argument 'index' from zero-based to one-based i.e. use index = 1 to drop the first stash.

git2r 0.21.0

  • Added methods 'odb_blobs' and 'odb_objects' with missing repository signature. Internally, they use 'getwd' and 'discover_repository' to open a repository.


  • The bundled libgit2 source code has been reverted to libgit2 v0.26.0 (15e1193) from 14 June 2017 (same as in git2r v0.19.0) to fix memory alignment errors.

git2r 0.20.0


  • Updated the bundled libgit2 source code to commit (fa8cf14) from 16 December 2017.

  • Improvements to the build configuration script.


  • Fixed the internal callback for remote host authentication from hanging indefinitely when querying an ssh-agent for credentials. Now, the callback signals an error instead of trying again if the authentication failed the first time.

git2r 0.19.0


  • Updated the bundled libgit2 source code to commit (15e1193) (v0.26.0) from 14 June 2017.

  • Added 'checkout' argument to 'clone()'. Allows to control whether checkout of HEAD is performed after the clone is complete. Setting 'checkout=FALSE' has similar effect as the git command line option '--no-checkout'. Andrzej K. Oles in #282.


  • Fixed memory protection errors in the git2r C source code reported by the 'rchk' tool.

  • Added missing calls to 'R_forceSymbols' and 'R_useDynamicSymbols' in the C init function.

  • Enable argument 'all' to commit multiple modified (or deleted) files. John Blischak in #283

  • Changed the configure script to determine the architecture of the machine earlier in order to fix an unsupported architecture error encountered on CentOS (#268, #288).

git2r 0.18.0


  • This is a bug-fix release to solve an error introduced in the build configuration on mac in version 0.17.0. The package failed with 'unable to load shared object', see issue #267.

git2r 0.17.0


  • Updated the bundled libgit2 source code to commit (6b0510e) from 20 December 2016.

  • Static linking of LibSSH2 on mac to support redistributable binary package with SSH transport enabled. Version 1.8.0 of LibSSH2 is downloaded and built from ''.

git2r 0.16.0


  • Updated libgit2 source code to commit (6b0510e) from 17 November 2016.

  • Add the option 'all_untracked' to the 'status' method to show individual files in untracked directories if the 'untracked' option is TRUE.

  • Add the 'tag_delete' method to delete an existing tag reference.

  • Update build configuration to support OpenSSL 1.1.0.

  • If the the 'getPass' package is installed the 'cred_ssh_key' method to create a new passphrase-protected ssh key credential object will call the 'getPass::getPass()' method if the private key is passphrase protected to allow for interactive input of the passphrase. The 'getPass' package is a suggested package. (Peter Meissner in PR #254)

  • Add 'path' argument to the 'reset' method to enable path-specific unstage, i.e. resets the index entries for all paths to their state at HEAD


  • Build configuration: use portable string equality comparison operator. This fixes the build e.g. for those without Bash as /bin/sh. (Sander Maijers in PR #243).

git2r 0.15.0


  • Build configuration: 'pkg-config' is now used to find 'libssl', if possible (Elias Pipping in PR #231).

  • Added a method to coerce a 'git_commit' object to a 'data.frame'.

  • Added the method 'is_branch' to check if an object is a 'git_branch'.


  • Build configuration: fixed installation with parallel make (Kirill Müller in PR #228).

git2r 0.14.0


  • Updated libgit2 source code to commit (785d8c48) from 2016-03-04. This is release v0.24.0 of libgit2.

  • Refactoring of the build scripts.

  • Added a check that the configuration key is valid when setting a configuration variable and output a warning if the key is invalid.

  • The status method now prints "working directory clean" instead of nothing when the working directory is clean.

  • Added the 'refspec' argument to the 'fetch' method to specify the refs to fetch and which local refs to update.

  • Added a workaround to the 'commit' method to list commits in a shallow clone since the libgit2 library does not yet support this.

git2r 0.13.1


  • This is a bug-fix release to solve problems introduced in version 0.12.1:

    • The bundled libgit2 source code has been reverted to commit (98f7bd2) from 2015-08-05 (same as in v0.11.0) to fix memory alignment errors (clang-UBSAN and gcc-UBSAN).

    • OpenSSL is now used again on OS X to provide the cryptographic support for HTTPS connections to fix a significant compiler warning (arithmetic on a pointer to void is a GNU extension [-Wpointer-arith]) on r-devel-osx-x86_64-clang.

    • Several fixes to the build configuration on non-Windows platforms.

git2r 0.12.1


  • Add 'remote_ls' method to list references in a remote repository akin to the git ls-remote command.

  • Add 'remote_set_url' method to set the remote's url in the configuration.

  • Add 'cred_token' S4 class to hold the name of the environmental variable with the secret. Default value for the name is GITHUB_PAT.

  • It is now possible to checkout a specific file with the 'checkout' method.

  • Add 'ssl_cert_locations' method to set libgit2 global option 'GIT_OPT_SET_SSL_CERT_LOCATIONS'

  • Add 'ceiling' argument to 'discover_repository' method to prevent search from walking up the parent directories.


  • Improvments to the cred_* functions documentation.

  • Add the following default arguments to the 'cred_ssh_key' method: publickey = '~/.ssh/' and privatekey = '~/.ssh/id_rsa'

  • On OSX, cascade CPPFLAGS and LDFLAGS to libssh2 build to allow libssh2 to be built against a user-installed openssl, discovered by configure or from R's Makeconf. Necessary to build on OS X ≥ 10.11

  • On OS X, SecureTransport is now used to provide the cryptographic support for HTTPS connections insead of OpenSSL.

  • The search for libssh2 during configuration (non Windows) is now done via pkg-config.

  • Update OpenSSL on Windows to v1.0.2d

  • Update libgit2 source code to commit (3f5877d) from 2015-11-12.


  • Add missing credentials argument to pull method.

  • Fix config failure when or are passed as variables.

  • Include '' in the distribution.

git2r 0.11.0


  • Add punch card plot.

  • Add branch argument to clone with name of the branch to checkout.

  • Add 'force' argument to 'add' method to add ignored files.

  • The following methods can now be called without the repository argument: 'branches', 'references', 'remotes', 'tags' and 'workdir'. When these methods are called without the repository argument, the repository is searched for with 'discover_repository' in the current working directory.

  • Add name of branch to each item in branch_list.

  • Add name of tag to each item in tags list.

  • Add S4 class 'cred_env' to pass credentials in environment variables.

  • SSH transport on Windows. This requires 'LibSSH2' and 'OpenSSL'. These two libraries are downloaded from '' during configuration of the package.

  • Static linking of LibSSH2 on OSX to support redistributable binary package with SSH transport enabled. Version 1.6.0 of LibSSH2 is downloaded and built from ''.


  • Better summary output from S4 classes 'git_commit' and 'git_repository'.

  • Updated libgit2 source code to commit (98f7bd2) from 2015-08-05.


  • Add imports to DESCRIPTION to fix CRAN notes.

  • Fix plot function to use the repository argument 'x'

  • Update configuration to build on OpenBSD.

  • Fix checkout branch in empty repository.

  • Fix path argument in rm_file.

  • Internal refactoring of C code that raise error to prevent segfault.

git2r 0.10.1


  • Rename 'bundle_repo' method to 'bundle_r_package'

git2r 0.10.0


  • Added method libgit2_sha that returns the commit id of the libgit2 library that the bundled source code is based on.

  • Added the method in_repository to determine if a directory is in a git repository.


  • Add brief summary of the five latest commits when summarizing a git_respository.

  • Added argument 'n' to the commits method to limit the number of commits in the output.

  • Added the following methods with missing repository signature; commits, is_shallow, is_empty, is_detached, repository and status. Internally, these methods use getwd and discover_repository to open a repository.

  • Changed configuration to raise error if the OpenSSL library is not found on non-Windows systems.

  • Changed configuration to raise error if the iconv library is not found on OSX.

  • Removed print of the configuration in the config method. Changed to return S3 class git_config.

  • Removed print of the status in the status method. Changed to return S3 class git_status.


  • Use OPENSSL_INCLUDES variable to build on Solaris.

  • Use bundled regex library on Solaris.

git2 0.9


  • Single quote 'libgit2' and 'Git' in Description field

git2 0.8


  • Added bare argument to clone method to create a bare repository

  • Added force argument to push to force local revision to the remote repo

  • Updated libgit2 source code (2a0f67f)

  • Internal refactoring of push


  • Added method rm_file to remove files

  • Added 'all' argument to commit method to stage modified and deleted files

  • Added shortcut to checkout previous branch with "-" which is synonymous with "@{-1}"

  • Added session argument to commit method to add sessionInfo to commit message

  • Added session argument to tag method to add sessionInfo to tag message

  • Added method to coerce POSIXlt to S4 class git_time

  • Added method 'revparse_single' to find object specified by revision

  • Added plot method

git2 0.7


  • Update libgit2 source code to commit (366e53d)

  • Fix configuration of compiler options when the OpenSSL library is found on non-Windows platforms

git2r 0.6


  • Update Title and Description field in DESCRIPTION file.

git2r 0.5


  • Update libgit2 source code to commit (a291790)

  • Use Alice and Bob as placeholder names in examples.

  • Add COPYRIGHTS file to list all copyright holders.

  • Fix significant compiler warnings from R CMD check with pedantic flag.

git2r 0.4


  • Fix build on Windows

git2r 0.3


  • Internal refactoring of merge method and merge tests.

  • Update libgit2 source code to version v0.22.0


  • Fix build on OSX.

git2r 0.2


  • Add method 'odb_objects' to list all objects available in the database as a data.frame

  • Add method 'odb_blobs' to list all blobs reachable from the commits in the object database.


  • Added examples to all exported methods.


  • Removed ggplot2 dependency. Moved plot functionality to the ggit package (

  • Renamed note_list method to notes

  • Removed markdown_link method

  • Renamed diff and merge arguments


  • Better performance when summarizing contributions.

  • Improved build of package.


  • Fixed memory leaks.

  • Fixed use of allocVector without protection.

  • Added unload hook to unload DLL.

  • Fix tree and blob tests to use writeChar instead of writeLines to have more control over line endings.

git2r 0.1


  • Many new features and methods added, see the documention for a description of the methods below:

    • Blob: content, blob_create, hash, hashfile, is_binary, is_blob, length, show, summary.
    • Branch: branch_create, branch_delete, branch_get_upstream, branch_remote_name, branch_remote_url, branch_rename, branch_set_upstream and branch_target.
    • Commit: is_commit and parents.
    • Diff: diff and diff_print.
    • Fetch: fetch and fetch_heads.
    • Libgit2: libgit2_features and libgit2_version.
    • Merge: merge.
    • Note: note_create, note_default_ref, note_list and note_remove.
    • Pull: pull.
    • Push: push.
    • Remote: remote_add, remote_remove, remote_rename and remote_url.
    • Repository: discover_repository and is_shallow
    • Reset: reset.
    • Stash: stash, stash_drop, stash_list, show and summary.
  • Improved error messages to give more detailed information including which function raised the error.


  • The following new S4 classes to handle the libgit2 data structures:
    • cred_ssh_key
    • cred_user_pass
    • git_blame
    • git_blame_hunk
    • git_blob
    • git_diff
    • git_diff_file
    • git_diff_hunk
    • git_diff_line
    • git_fetch_head
    • git_merge_result
    • git_note
    • git_reflog_entry
    • git_stash
    • git_transfer_progress
    • git_tree


  • Renamed methods:

    • is.bare to is_bare
    • is.empty to is_empty
    • is.head to is_head
    • is.local to is_local
  • Rename hex to sha for the 40-character SHA-1 hash in method arguments and S4 class slots.

git2r 0.0.8


  • Added method to clone repository

  • Added method config to set and in a repository

  • Added method status to display state of a repository

git2r 0.0.7


  • Added method to create a commit


  • Improved error checking

git2r 0.0.6


  • Added method init to create a new Git repository


  • Removed usage of testthat package when testing the package

  • Removed bundled zlib in src/zlib and instead link against zlib shipped with R.

  • Dropped usage of external pointers, S4 git_repository now keeps track of the path of the repository.

git2r 0.0.5


  • Renamed S4 class repository to git_repository


  • Added method commits to list all commits in repository

  • Added S4 class git_commit to hold infformation of a commit

  • Added S4 class git_time to hold time of an action

  • Added slot walker to S4 class git_repository

git2r 0.0.4


  • Added method remote_url to get the url a remote in a repository

  • Added method workdir to get workdir of a repository

  • Added method remotes to list remotes of a repository

  • Added S4 class git_signature to hold information of an action signature (e.g. for committers, taggers, etc)


  • Renamed S4 class tag to git_tag

  • Renamed S4 class branch to git_branch

  • Renamed S4 class reference to git_reference

git2r 0.0.3


  • Added method branches to list branches

  • Added method head to retrieve head

  • Added method is.head to check if a branch is head

  • Added method is.local to check if a branch is local

  • Added S4 class branch to hold information of a git branch

  • Added method to show a reference

  • Added method to list all references in a repository

  • Added S4 class reference to hold information of a git reference

git2r 0.0.2


  • Added is.bare method to check if a repository is bare

  • Added is.empty method to check if a repository is empty

git2r 0.0.1


  • Added S4 class repository to work with a git repository

  • Initial package structure

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.24.0 by Stefan Widgren, 13 days ago

Report a bug at

Browse source code at

Authors: See AUTHORS file.

Documentation:   PDF Manual  

Task views: Web Technologies and Services

GPL-2 license

Imports graphics, utils

Suggests getPass

System requirements: By default, git2r uses a system installation of the libgit2 headers and library. However, if a system installation is not available, builds and uses a bundled version of the libgit2 source. zlib headers and library. OpenSSL headers and library (non-macOS). LibSSH2 (optional on non-Windows) to enable the SSH transport.

Imported by BioInstaller, RSuite, RepoGenerator, Rpolyhedra, adapr, archivist.github, badgecreatr, changer, codemetar, devtools, excerptr, kirby21.base, mlflow, phuse, piggyback, prodigenr, reproducible, spm12r, usethis, workflowr.

Suggested by Rcereal, adaptalint, drat, envDocument, gistr, nat.templatebrains, remotes.

See at CRAN