Skip to content
Please note that GitHub no longer supports your web browser.

We recommend upgrading to the latest Google Chrome or Firefox.

Learn more
Native Node bindings to Git.
JavaScript C++ Other
Branch: master
Clone or download
Latest commit 1047f66 Sep 26, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Enable builds on tags Sep 9, 2019
.travis TravisCI: Create and push tags Nov 21, 2015
examples Fix documentation and uses of certificateCheck since it works correctly Jan 28, 2019
generate Use const qualifier more; use static_cast for void * Sep 26, 2019
guides Fix documentation and uses of certificateCheck since it works correctly Jan 28, 2019
lib Bump libgit2 to latest fork of master Sep 13, 2019
lifecycleScripts If npm -v fails, we should assume we're in yarn and do nothing Mar 4, 2019
test Bump libgit2 to latest fork of master Sep 13, 2019
utils Use GitHub Actions for CI Aug 26, 2019
vendor Bump libgit2 to latest fork of master Sep 13, 2019
.astylerc prettify generated output Nov 25, 2014
.editorconfig Added editor config Nov 24, 2014
.gitignore Copy libssh2 config headers straight into `vendor/libssh2` Oct 17, 2018
.gitmodules Add submodule for http_parser at 2.5.0 Sep 24, 2018
.jshintrc ES6 support for JSHint Apr 29, 2016
.npmignore Bring life cycle in line with npm standards Jun 14, 2016
.travis.yml Start building for Node 12 Jul 12, 2019
CHANGELOG.md Bupm to v0.26.2 Sep 26, 2019
CONTRIBUTING.md Fix typos Dec 16, 2017
FAQ.md Start up a FAQ Mar 22, 2016
HISTORY.md fix a few things Nov 25, 2014
LICENSE Updated the license date and binding to latest. Apr 30, 2014
README.md Update README.md for inactive maintainers Sep 26, 2019
TESTING.md Fix incorrect anchor link in TESTING.md Jan 3, 2017
appveyor.yml Start building for Node 12 Jul 12, 2019
package-lock.json Bupm to v0.26.2 Sep 26, 2019
package.json Bupm to v0.26.2 Sep 26, 2019

README.md

NodeGit

Node bindings to the libgit2 project.

Linux & macOS Windows Coverage Dependencies
Build Status Travis Build Status AppVeyor Coveralls Dependencies

Stable (libgit2@v0.28.3): 0.28.3

Have a problem? Come chat with us!

Visit slack.libgit2.org to sign up, then join us in #nodegit.

Maintained by

Tyler Ang-Wanek @twwanek with help from tons of awesome contributors!

Alumni Maintainers

Tim Branyen @tbranyen, John Haley @johnhaley81, Max Korp @maxkorp, Steve Smith @orderedlist, Michael Robinson @codeofinterest, and Nick Kallen @nk

API Documentation.

http://www.nodegit.org/

Getting started.

NodeGit will work on most systems out-of-the-box without any native dependencies.

npm install nodegit

If you receive errors about libstdc++, which are commonly experienced when building on Travis-CI, you can fix this by upgrading to the latest libstdc++-4.9.

In Ubuntu:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install libstdc++-4.9-dev

In Travis:

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - libstdc++-4.9-dev

In CircleCI:

  dependencies:
    pre:
      - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
      - sudo apt-get update
      - sudo apt-get install -y libstdc++-4.9-dev

If you receive errors about lifecycleScripts preinstall/install you probably miss libssl-dev In Ubuntu:

sudo apt-get install libssl-dev

You will need the following libraries installed on your linux machine:

  • libpcre
  • libpcreposix
  • libkrb5
  • libk5crypto
  • libcom_err

When building locally, you will also need development packages for kerberos and pcre, so both of these utilities must be present on your machine:

  • pcre-config
  • krb5-config

If you are still encountering problems while installing, you should try the Building from source instructions.

API examples.

Cloning a repository and reading a file:

var Git = require("nodegit");

// Clone a given repository into the `./tmp` folder.
Git.Clone("https://github.com/nodegit/nodegit", "./tmp")
  // Look up this known commit.
  .then(function(repo) {
    // Use a known commit sha from this repository.
    return repo.getCommit("59b20b8d5c6ff8d09518454d4dd8b7b30f095ab5");
  })
  // Look up a specific file within that commit.
  .then(function(commit) {
    return commit.getEntry("README.md");
  })
  // Get the blob contents from the file.
  .then(function(entry) {
    // Patch the blob to contain a reference to the entry.
    return entry.getBlob().then(function(blob) {
      blob.entry = entry;
      return blob;
    });
  })
  // Display information about the blob.
  .then(function(blob) {
    // Show the path, sha, and filesize in bytes.
    console.log(blob.entry.path() + blob.entry.sha() + blob.rawsize() + "b");

    // Show a spacer.
    console.log(Array(72).join("=") + "\n\n");

    // Show the entire file.
    console.log(String(blob));
  })
  .catch(function(err) { console.log(err); });

Emulating git log:

var Git = require("nodegit");

// Open the repository directory.
Git.Repository.open("tmp")
  // Open the master branch.
  .then(function(repo) {
    return repo.getMasterCommit();
  })
  // Display information about commits on master.
  .then(function(firstCommitOnMaster) {
    // Create a new history event emitter.
    var history = firstCommitOnMaster.history();

    // Create a counter to only show up to 9 entries.
    var count = 0;

    // Listen for commit events from the history.
    history.on("commit", function(commit) {
      // Disregard commits past 9.
      if (++count >= 9) {
        return;
      }

      // Show the commit sha.
      console.log("commit " + commit.sha());

      // Store the author object.
      var author = commit.author();

      // Display author information.
      console.log("Author:\t" + author.name() + " <" + author.email() + ">");

      // Show the commit date.
      console.log("Date:\t" + commit.date());

      // Give some space and show the message.
      console.log("\n    " + commit.message());
    });

    // Start emitting events.
    history.start();
  });

For more examples, check the examples/ folder.

Unit tests.

You will need to build locally before running the tests. See above.

npm test
You can’t perform that action at this time.