Gets Git version and commit information for one or more repositories. This is useful for applications that span multiple repositories or use submodules.
Git is expected to be preinstalled (and in PATH
).
The script simply runs shell commands similar to:
- repository:
git config --get remote.origin.url
- branch:
git rev-parse --abbrev-ref HEAD
- sha1:
git rev-parse HEAD
- date:
git --no-pager log --pretty=format:"%at" -n1
- clean:
git diff-index --quiet HEAD --
- version:
git describe --tags --match "v[0-9]*" HEAD
npm install -g get-git-version
To get information about the current directory, run:
get-git-version
If the working directory contains a package.json
file, it will be used to set the name
and default version
.
Otherwise, the name of the current folder is used as the name
and version
is not set.
{
"name": "get-git-version",
"version": "0.0.4",
"git": {
"repository": "https://github.com/polys/git-version.git",
"branch": "master",
"sha1": "dccb48950fa60511c3b235404209f17610aab67e",
"date": "2018-04-21T17:31:35+01:00",
"clean": false
},
"components": []
}
or with --version-only
:
{
"name": "get-git-version",
"version": "0.1.4"
}
-
-w [path]
or--working-dir [path]
overrides the working directory (defaults to the current directory) -
-o [path]
or--out-file [path]
writes the output to a file instead ofstdout
-
-c [path]
or--config-file [path]
overrides the config file name (defaults to.git-version.config.json
) -
--app-id [id]
overrides the applicationid
(defaults toapp
) -
--version-tag-prefix [prefix]
overrides the default version tag prefix (defaults tov[0-9]*
) -
--no-pretty
disables pretty printing the output JSON -
--version-only
returns only the version, without git information -
-h
or--help
outputs usage information
Create a .git-version.config.json
file with a simple array, similar to:
[
{
"id": "app",
"name": "Test App",
"path": ".",
"versionTagPrefix": "v[0-9]*",
"version": "0.1"
},
{
"id": "dummy",
"name": "Dummy Component",
"path": ".",
"versionTagPrefix": "v[0-9]*"
}
]
All entries are expected to have an id
.
If name
is specified, it's simply copied to the output.
If path
is specified, it's joined to the working directory path; otherwise, defaults to the working directory.
An item whose id
is app
(can be overridden using the --app-id
command-line option) is required and treated as the main application. All other items are considered components of that application.
If versionTagPrefix
is specified, a version
is computed for the component, based on the most recent git tag that starts with this prefix. If no matching tag is not found, version
won't be defined.