git-issue icon indicating copy to clipboard operation
git-issue copied to clipboard

Bug tracker based on git

Git-issue

.github/workflows/ci.yml pipeline status

Git-issue is a bug tracker based on git.

Why?

Git is a great tool to versioning source but also to store everything. Git is designed like a file system, or if you prefer buzz words, you can see it like a nosql database. A nosql database over a FS?.

Sorry, I digress. So why do not use it to store issues? In fact, use git automatically makes your issues tracker versioned and distributed, like your code.

Of course, it is not the first distributed issue tracker but git-issue exist because the other projects doesn't cover all these objectives:

  • fully based on git ;
  • minimal dependencies ;
  • fully tested.

Installation

Place the single file src/git-issue in your path.

For example:

$ git clone https://github.com/sanpii/git-issue.git
$ mkdir -p ~/.local/bin
$ ln -s $(pwd)/git-issue/src/git-issue ~/.local/bin
$ echo 'export PATH=$PATH:$HOME/.local/bin' >> ~/.bashrc

Configuration

Git-issue reuse git configuration (user name, editor, …) but provide some options.

issue.branch

The branch name used for store the issues. issues by default.

issue.remote

Remote name to publish issues. origin by default.

color.issue.id

Color use to display id. blue bold by default.

color.issue.metadata

Color use to display metadata name. yellow bold by default.

issue.html.branch

The branch where HTML pages as generated. gh-pages by default.

issue.html.showdow

The URL where showdow.js was download. https://raw.githubusercontent.com/coreyti/showdown/1.9.1/dist/showdown.min.js by default.

issue.html.zepto

The URL where zepto was download. http://zeptojs.com/zepto.min.js by default.

issue.html.bootstrap

The URL where twitter bootstrap was download. http://netdna.bootstrapcdn.com/bootstrap/3.4.1 by default.

issue.html.charset

The charset specified in the content type. UTF-8 by default.

issue.html.title

The title of the page. Issues tracker by default.

Commands

Initialize your issue database

This is the required first step:

$ git issue init

Create a new issue

$ git issue new --title='A new issue' 'A long description'
Issue #1 created.

If you don't specify a description, the issue is opened in an editor unless the --no-edit is added.

Show an issue

$ git issue show 1
title: Issue title
status: new
assign:
tags:
milestone:
type:

A long description

List all issue

$ git issue list
1: Issue title

By default, only unclosed issues are listed. You can use filter on status, title, tags, milestone or type:

$ git issue list --status=close

Or inverted filter:

$ git issue list --status=~accepted

Or multiple values:

$ git issue list --status='new|accepted'

Edit an issue

$ git issue edit 1

Git issue open the issue with your preferred editor. Edit, save and quit. The issue is automatically committed.

Or you can rapidly edit issue metadata:

$ git issue edit --status=done 1

Close an issue

And you can more rapidly close an issue:

$ git issue close 1

Delete an issue

$ git issue delete 1

Synchronize issues

Bidirectional synchronize:

$ git issue sync
Issues synced.

Publish issues as HTML

$ git issue html
$ git checkout gh-pages
$ git push -u originn gh-pages

You can see the result for this repository here.

A bug?

Clone this repository and use git-issue on it. After creating an issue, send me a pull request.