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

@ert78gb/git-utils

v2.0.0

Published

Few git command

Downloads

3

Readme

git-utils

A few useful command to get git infos. Required node 10 or higher.

Prerequisites

The library is a wrapper around the git binary you have to install git before use this library.

Commands

Clone

Clone a remote repository

const { clone } = require('@ert78gb/git-utils')

// Equivalent git command
// git clone https://github.com/ert78gb/git-utils-test.git /Users/User/git/git-utils-test
await clone({
  url: 'https://github.com/ert78gb/git-utils-test.git',
  cwd: '/Users/User/git/git-utils-test', // where to clone
})

Options

| parameter (type) | default value | description | | ---------------- | ------------- | ------------------------------------------------------------------------ | | url (string) | empty | HTTPS url of the remote repository | | cwd (string) | inherited | Where to clone the remote repository. Inherited from the Node.js context |

Checkout Branch

Checkout existing branch.

const { checkoutBranch } = require('@ert78gb/git-utils')

// Equivalent git command
// git checkout <branch-name>
await checkoutBranch({
  branchName: 'my-branch',
  cwd: 'path of the git repo',
})

Options

| parameter (type) | default value | description | | ------------------- | ------------- | -------------------------------------------------------------- | | branchName (string) | empty | Name of the branch that would like to checkout | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context |

Get Current Branch

Current branch name.

const { getCurrentBranchName } = require('@ert78gb/git-utils')

// Equivalent git command
// git rev-parse --abbrev-ref HEAD
const branch = await checkoutBranch({
  cwd: 'path of the git repo',
})

console.log(branch) // my-branch

Options

| parameter (type) | default value | description | | ---------------- | ------------- | -------------------------------------------------------------- | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context |

Get Current Sha

The current SHA1 hash.

const { getCurrentSha } = require('@ert78gb/git-utils')

// Equivalent git command
// git rev-parse HEAD
const sha = await getCurrentSha({
  cwd: 'path of the git repo',
})

console.log(sha) // dd064f731ce78a1dd64c41781c8bb01cfda9a6d8

Options

| parameter (type) | default value | description | | ---------------- | ------------- | -------------------------------------------------------------- | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context |

Get File Changes

All commit info of a file path. The array is ordered by commit date in descending order.

const { getFileChanges } = require('@ert78gb/git-utils')

// Equivalent git command
// git log --follow --no-decorate --date=iso8601-strict -- file-path
const commitInfos = await getFileChanges({
  cwd: 'path of the git repo',
  path: 'folder/file.path'
})

console.log(commitInfos)
// [
//   {
//    sha: 'd3e89505291cb1d5881c6033d2ffd0abfc68fe10',
//    author: 'Committer',
//    date: 2021-02-08T16:19:42.000Z, // Commit date as Date
//    message: 'fix: modify file'
//   },
//   {
//    sha: '7f15cc49347592fbd60ea839f7e06be553965234',
//    author: 'Committer',
//    date: 2020-02-08T16:19:42.000Z, // Commit date as Date
//    message: 'feat: create file'
//   }
// ]

Options

| parameter (type) | default value | description | | ---------------- | ------------- | -------------------------------------------------------------- | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context | | path (string) | | The path of the file from the repository root |

Get Commit Info

The latest commit info.

const { getCommitInfo } = require('@ert78gb/git-utils')

// Equivalent git command
// git rev-parse HEAD
const info = await getCommitInfo({
  cwd: 'path of the git repo',
})

console.log(info)
// {
//  sha: '7f15cc49347592fbd60ea839f7e06be553965234',
//  author: 'Committer',
//  date: 2020-02-08T16:19:42.000Z, // Commit date as Date
//  message: 'feat: add b.txt\n\nBody of the comment'
// }

Options

| parameter (type) | default value | description | | ---------------- | ------------- | -------------------------------------------------------------- | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context |

Output

Array<{
  sha:string,
  author: string,
  date: Date,
  message: string
  }>

Get Parent SHA

Query the parent shas of the latest commit or the provided SHA. If a commit is a merge commit it has multiple parent

const { getParentShas } = require('@ert78gb/git-utils')

// Equivalent git command
// git log --pretty=%P -1 7f15cc49347592fbd60ea839f7e06be553965234
const shas = await getCommitInfo({
  sha: '7f15cc49347592fbd60ea839f7e06be553965234',
  cwd: 'path of the git repo',
})

console.log(shas) // ['cde7266d8004b1391ce033fd86f0ffe4a1ce1793']

Options

| parameter (type) | default value | description | | ---------------- | ------------- | ----------------------------------------------------------------------------------- | | sha (string) | empty | SHA of the commit which parents you would like to get. You can use branch name too. | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context |

Get Merge base

Get the merge base of 2 sha or 2 branch

const { getMergeBase } = require('@ert78gb/git-utils')

// Equivalent git command
// git merge-base 7f15cc49347592fbd60ea839f7e06be553965234 cde7266d8004b1391ce033fd86f0ffe4a1ce1793
// git merge-base master feature-branch-name
const sha = await getMergeBase({
  sha1: '7f15cc49347592fbd60ea839f7e06be553965234',
  sha2: 'cde7266d8004b1391ce033fd86f0ffe4a1ce1793',
  cwd: 'path of the git repo',
})

console.log(sha) // d3e89505291cb1d5881c6033d2ffd0abfc68fe10

Options

| parameter (type) | default value | description | | ---------------- | ------------------------ | -------------------------------------------------------------------------------------------------------- | | sha1 (string) | empty | SHA or branch name which part of the merge | | sha2 (string) | sha of the latest commit | SHA or branch name which part of the merge. The default value is the latest commit in the current branch | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context |

Get Changed Files

Get the changed files of 2 sha or 2 commit

const { getChangedFiles } = require('@ert78gb/git-utils')

// Equivalent git command
// git diff --name-status 7f15cc49347592fbd60ea839f7e06be553965234 cde7266d8004b1391ce033fd86f0ffe4a1ce1793
// git dif --name-status master feature-branch-name
const changedFiles = await getChangedFiles({
  sha1: '7f15cc49347592fbd60ea839f7e06be553965234',
  sha2: 'cde7266d8004b1391ce033fd86f0ffe4a1ce1793',
  cwd: 'path of the git repo',
})

console.log(changedFiles) // [ { action: 'added', path: 'b.txt' } ]

Options

| parameter (type) | default value | description | | ---------------- | ------------------------ | ------------------------------------------------------------------------------------------- | | sha1 (string) | empty | SHA or branch name which part of the diff | | sha2 (string) | sha of the latest commit | SHA or branch name which diff. The default value is the latest commit in the current branch | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context |

Output

Array<{
  action: string,
  path: string
}>

Values of the actions

  • added
  • modified
  • deleted

Get Remote Tags

const { getRemoteTags } = require('@ert78gb/git-utils')

// Equivalent git command
// git ls-remote --tags https://github.com/ert78gb/git-utils-test.git org/feature/*
const tags = await getRemoteTags({
  remote: 'https://github.com/ert78gb/git-utils-test.git',
  prefix: 'org/feature/*',
})

console.log(tags) // Map { 'org/feature/v1.0.0' => 'cde7266d8004b1391ce033fd86f0ffe4a1ce1793', 'org/feature/v1.1.0' => '14630f2c65026f9bda22d6def4abd80ada6fcc6e' }

Options

| parameter (type) | default value | description | | ---------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------- | | remote (string) | 'origin' | URL of the remote git repo or alias remote of the local repo | | prefix (string) | empty | return only tags that match this pattern. If the * missing from the end of the string it will exact match not just prefix | | cwd (string) | inherited | Path of the git repository. Inherited from the Node.js context |

Output

Map<string, string> // the key and the value also string.
// The key is the tag name the value is the commit sha