Build Status Build Status Coverage Status MIT NPM Version
Promises for git commands such as git init,
git status, git add *, git diff, git log and git commit -am"commit message".
Comments are welcome at nodegit-kit/issues
npm i --save nodegit-kit
var git = require('nodegit-kit'); git.open('../repo-path/new/or/existing') .then(repo => { // git diff return git.diff(repo) .then(diff => { console.log(diff); // git commit -am"commit message" return git.commit(repo, { 'message': 'commit message' }); }) .then(() => { // git log return git.log(repo); }) .then(log => { console.log(log); }); }) .catch(error => { console.error(error); });
Returns repository, if no repo is found, tries to create the directory and initializes the repository. Initializing is using init internally.
pathStringoptionsObjectinitBoolean whether to create a first commit, defaults to true
git.open('../repo-path/new/or/existing', { 'init': false }) .then(repo => { // NodeGit repository instance }) .catch(err => { // no repo here });
Checks if status has pending changes, commits, returns Oid else returns null.
repoNodeGit repository instanceoptionsmessageString defaults to 'update'
git.open('../repo-path/new/or/existing') .then(repo => { // git commit -am"a new commit" return git.commit(repo, { 'message': 'a new commit' }) .then(oid => { console.log(oid); }); });
Returns an Array of changed files and their status.
repoNodeGit repository instance
git.open('../repo-path/new/or/existing') .then(repo => { // git status return git.status(repo) .then(status => { console.log(status); }); });
Returns an Array of all commits.
repoNodeGit repository instanceoptionsbranchString name of a branch, defaults to 'master'sortString can be 'none', 'topological', 'time' or 'reverse'abbrev-commitBoolean if true shortens checksum, defaults to falseabbrevNumber to specify a custom number of digits in combination withabbrev-commit, otherwise uses 'core.abbrev' configmax-countMax number of commits to traverse
git.open('../repo-path/new/or/existing') .then(repo => { // git log return git.log(repo) .then(log => { console.log(log); }); });
Returns an Array of modified files and their diffs.
repoNodeGit repository instanceoptionsname-onlyBoolean return only filenames, defaults to false
git.open('../repo-path/new/or/existing') .then(repo => { // git diff return git.diff(repo, { 'name-only': true }) .then(filenames => { console.log(filenames); }); });
git.open('../repo-path/new/or/existing') .then(repo => { return git.log(repo) .then(history => { return history[0].commit; }) .then(commit => { // git diff <commit> return git.diff(repo, commit); }) .then(diff => { console.log(diff); }); });
Breaking API change in 0.12.0
Changed order of from and to to be aligned with git-cli.
git.open('../repo-path/new/or/existing') .then(repo => { return git.log(repo, { sort: 'reverse' }) .then(history => { var commit1 = history[0].commit; var commit2 = history[2].commit; // git diff <from> <to> return git.diff(repo, commit1, commit2); }) .then(diff => { console.log(diff); }); });
Allows to write/read global and local git config values.
Local values are stored in the Git directory ./git/config and overrule global configurations.
Note: Git locks the config when changing configurations,
therefore writing multiple configs can not be done in parallel.
e.g. Promise.all multiple individual git.config.set calls
will throw a "Failed to lock file for writing" error,
nodegit/issues/757.
See also 8.1 Customizing Git - Git Configuration (Git SCM Documentation)
Set user name and email similar to cd repo then
git config user.name "John Doe" and git config user.email johndoe@example.com.
git.open('my/repository') .then(repo => { return git.config.set(repo, { 'user.name': 'John Doe', 'user.email': 'johndoe@example.com' }); });
Similar to cd repo thengit config user.name returns config for a repository if there any or else the global Git configuration.
git.open('my/repository') .then(repo => { return git.config.get(repo, ['user.name', 'user.email']); }) .then(configs => { // [ 'John Doe', 'johndoe@example.com' ] });
When no repo is given, setting and getting config will operate in --global mode and read and write to ~/.gitconfig (or ~/.config/git/config).
git.config.get(['user.name', 'user.email']) .then(config => { // [ 'John Doe', 'johndoe@example.com' ] });
// WARNING: this will change your global git config git.config.set({ 'user.name': 'John Doe', 'user.email': 'johndoe@example.com' });
Ensures directory exists, initializes, creates a first commit and returns repo. This is optional and only useful to control the first commit.
pathStringoptionsObjectbareNumber defaults to 0commitBoolean defaults to truemessageString defaults to 'initial commit'
git.init('../repo-path/new/or/existing', { 'bare': 0, 'commit': true, 'message': 'my first commit' }) .then(repo => { // NodeGit repository instance });
Can be used to in combination with suppressing commit on init.
repoNodeGit Repository instanceoptionsmessageString defaults to 'initial commit'
git.open('../path/to/repo', { 'init': false }) .catch(err => { return git.init('../path/to/repo', { 'commit': false }) .then(repo => { // do something before first commit return repo; }) .then(repo => { git.init.commit(repo, { 'message': 'initialize repository' }); }); }) .then(repo => { // NodeGit repository instance });
npm install npm test # debug nodegit-kit DEBUG=kit* npm test # debug all DEBUG=* npm test