git-issue-0.3.0 is not a library.
git-issue 🗂️
A Git-native, file-backed issue tracker.
Issues live alongside your code inside .gitissues/, making them platform-independent, version-controlled, branchable, mergeable, reviewable and offline-friendly.
Features
- ✅ Git-native, file-backed issues under
.gitissues/ - ✅ Core commands:
init,new,list,show,set,edit - ✅ Each issue has a markdown description incl. attachments
- ✅ Each issue has metadata:
id,title,state,type,labels,assignee,priority,due_date,created,updated - ✅ Configurable: default columns for
list, commit message template, external editor - ✅ External editor renders issue information as markdown
- ✅ Git-integration: auto-commit of changes
- ✅ Automated integration tests
- 🚧 Filtering/sorting of
listview - 🚧 Add
searchcommand across all issue titles and descriptions - 🚧 Relationships between issues
- 🚧 Comments / discussions
Usage
# Help page
# Version
# Initialize tracking in your repo
# Create a new issue
# List issues
# Show all issue information (markdown) -- launches external text editor
# Change issue meta fields
# Change issue meta fields: labels
# Edit issue description (markdown) -- launches external text editor
Example
Dummy example project to see how git-issue is used in a repo: https://github.com/timonburkard/example-project
Configuration
Config
After running git issue init, a default config file is created at .gitissues/config.yaml:
# Automatically create a git commit after mutating commands
commit_auto: true
# Commit message template
# Available placeholders: {action}, {id}, {title}
commit_message: "[issue] {action} #{id} - {title}"
# Editor for editing issue descriptions
# git = use the git-configured editor
editor: git
# Default columns to display in `issue list`
# ["*"] can be used to include all available columns
list_columns:
- id
- state
- assignee
- title
This config can be edited by the user.
Config Options
commit_auto(boolean): Iftrue, automatically commit changes to.gitissues/. Default:truecommit_message(string): Template for git commit messages. Supports placeholders:{id}: Issue ID{title}: Issue title{action}: Command that triggered the commit (new,edit description,set <field>)
editor(string): External text editor (setgitto use configured git core.editor)list_columns(string list): Default columns shown inlistcommand
Description Template
After running git issue init, a default description template file is created at .gitissues/description.md:
This template can be edited by the user.
Installation
GitHub Release
Download the latest release from GitHub and put the binary on your PATH.
- Go to the Releases page and download the binary for your platform:
git-issue-linux-x86_64git-issue-macos-x86_64orgit-issue-macos-aarch64git-issue-windows-x86_64.exe
- Rename to the canonical name and place on your PATH
- Linux/macOS:
- Windows: rename
git-issue-windows-x86_64.exetogit-issue.exeand move it to a directory on your PATH.
- Linux/macOS:
- Verify:
Cargo
cargo install --git https://github.com/timonburkard/git-issue
Crates
🚧 TODO
cargo install git-issue
Building & Development
# Build
# Run tests
# Format code
# Lint
Storage Layout
Issues live in .gitissues/issues/{ID}/:
.gitissues/
├── .tmp/ # Temporary files: Put in `.gitignore`
├── config.yaml # Configuration
├── description.md # Description template
└── issues/
└── 0000000001/
├── meta.yaml # Structured metadata
├── description.md # Markdown description
└── attachments/ # Attachments of markdown description
├── 0000000002/
├── meta.yaml # Structured metadata
├── description.md # Markdown description
└── attachments/ # Attachments of markdown description
└── ...
meta.yaml Format
id: 1234 # (Integer) Identifier
title: Login screen is broken # (String) Title
state: new # (String) E.g.: new, active, resolved, junked
type: bug # (String) E.g.: feature, bug, task
labels: # (List of Strings) Labels / tags
- software
- ui
assignee: t.burkard # (String) To whom the issue is assigned
priority: P2 # (Enum) Priority: P0 = highest, P2 = default, P4 = lowest
due_date: # (Date) Due date in ISO format: YYYY-MM-DD
created: # (Timestamp) Issue was created at
updated: # (Timestamp) Issue was last updated at
Architecture
config/config-default.yaml-- Default configuration, applied atgit issue initdescription-default.md-- Default description template, applied atgit issue init
src/main.rs-- CLI parsing with clapmodel.rs-- Shared data types, functions and utilitiesedit.rs-- Edit issue description (markdown) with external text editorinit.rs-- Initialize.gitissues/directory and copy default configlist.rs-- List all issuesnew.rs-- Create new issuesset.rs-- Change issue meta fieldsshow.rs-- Show details of an issue
Dependencies
clap-- CLI argument parsingchrono-- Timestamp generationserde-- Serialization frameworkserde_yaml-- YAML parsing for meta.yaml filesshell-words-- Process command line according to parsing rules of Unix shellregex-- Regular expressions