Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ert78gb/git-utils
A few useful command to get git infos
https://github.com/ert78gb/git-utils
git nodejs
Last synced: 13 days ago
JSON representation
A few useful command to get git infos
- Host: GitHub
- URL: https://github.com/ert78gb/git-utils
- Owner: ert78gb
- Created: 2020-02-15T18:43:03.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-03-29T01:57:55.000Z (over 1 year ago)
- Last Synced: 2024-11-29T13:58:00.395Z (24 days ago)
- Topics: git, nodejs
- Language: JavaScript
- Homepage:
- Size: 822 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: readme.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
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](https://git-scm.com/) before use this library.
## Commands
### Clone
Clone a remote repository
```javascript
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.
```javascript
const { checkoutBranch } = require('@ert78gb/git-utils')// Equivalent git command
// git checkout
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.
```javascript
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.
```javascript
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.```javascript
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.
```javascript
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
```typescript
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```javascript
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
```javascript
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
```javascript
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
```Typescript
Array<{
action: string,
path: string
}>
```Values of the actions
- added
- modified
- deleted## Get Remote Tags
```javascript
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
```typescript
Map // the key and the value also string.
// The key is the tag name the value is the commit sha
```