npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nodegit-kit

v0.21.0

Published

Complementary NodeGit helpers returning native Promises, helps with git commands such as init, add, commit, status, diff

Downloads

252

Readme

NodeGit-Kit

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

Install

npm i --save nodegit-kit

Usage

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.

  • path String
  • options Object
    • init Boolean 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.

  • repo NodeGit repository instance
  • options
    • message String 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.

  • repo NodeGit 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.

  • repo NodeGit repository instance
  • options
    • branch String name of a branch, defaults to 'master'
    • sort String can be 'none', 'topological', 'time' or 'reverse'
    • abbrev-commit Boolean if true shortens checksum, defaults to false
    • abbrev Number to specify a custom number of digits in combination with abbrev-commit, otherwise uses 'core.abbrev' config
    • max-count Max 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]][, options])

Returns an Array of modified files and their diffs.

  • repo NodeGit repository instance
  • options
    • name-only Boolean 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 [email protected].

git.open('my/repository')
.then(repo => {
    return git.config.set(repo, {
        'user.name': 'John Doe',
        'user.email': '[email protected]'
    });
});

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', '[email protected]' ]
});

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', '[email protected]' ]
});

config.set (options)

// WARNING: this will change your global git config
git.config.set({
    'user.name': 'John Doe',
    'user.email': '[email protected]'
});

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.

  • path String
  • options Object
    • bare Number defaults to 0
    • commit Boolean defaults to true
    • message String 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.

  • repo NodeGit Repository instance
  • options
    • message String 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 test