nodegit-kit v0.21.0
NodeGit-Kit
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
Install
npm i --save nodegit-kitUsage
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);
});API
open (path, options)
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
});commit (repo, options)
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);
});
});status (repo)
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);
});
});log (repo, options)
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);
});
});diff (repo, commit[, commit])
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);
});
});Get a diff of a commit
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);
});
});Get a diff between 2 commits
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);
});
});config
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)
config.set (repo, options)
Example setting user.name and user.email for a specific repository
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'
});
});config.get (repo, options)
Example reading user.name and user.email
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' ]
});global git configuration
config.get (options)
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' ]
});config.set (options)
// WARNING: this will change your global git config
git.config.set({
'user.name': 'John Doe',
'user.email': 'johndoe@example.com'
});init (path, options)
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
});init.commit (repo, options)
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
});Test
npm install
npm test
# debug nodegit-kit
DEBUG=kit* npm test
# debug all
DEBUG=* npm test6 years ago
6 years ago
7 years ago
7 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago