{"id":15616327,"url":"https://github.com/jhspetersson/git-task","last_synced_at":"2025-04-14T15:41:26.893Z","repository":{"id":251430269,"uuid":"837384549","full_name":"jhspetersson/git-task","owner":"jhspetersson","description":"Local-first task manager/bug tracker that stores everything right in the git repository and can sync issues from/to GitHub or Gitlab.","archived":false,"fork":false,"pushed_at":"2025-03-06T15:46:17.000Z","size":951,"stargazers_count":28,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T04:35:00.170Z","etag":null,"topics":["bug","bug-tracker","cli","git","github","gitlab","manager","rust","task","task-manager","tracker"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jhspetersson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-02T21:06:50.000Z","updated_at":"2025-03-06T15:46:21.000Z","dependencies_parsed_at":"2024-08-03T00:05:21.176Z","dependency_job_id":"40195982-c40c-4e26-bb92-4e4978c25342","html_url":"https://github.com/jhspetersson/git-task","commit_stats":{"total_commits":188,"total_committers":1,"mean_commits":188.0,"dds":0.0,"last_synced_commit":"16f11b98e1ebc334b0d35ad62e593f1137ee0e6b"},"previous_names":["jhspetersson/git-task"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhspetersson%2Fgit-task","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhspetersson%2Fgit-task/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhspetersson%2Fgit-task/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhspetersson%2Fgit-task/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jhspetersson","download_url":"https://codeload.github.com/jhspetersson/git-task/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248907927,"owners_count":21181433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bug","bug-tracker","cli","git","github","gitlab","manager","rust","task","task-manager","tracker"],"created_at":"2024-10-03T07:06:35.069Z","updated_at":"2025-04-14T15:41:26.886Z","avatar_url":"https://github.com/jhspetersson.png","language":"Rust","readme":"# git-task\n\nLocal-first task manager/bug tracker within your git repository which can import issues from GitHub or Gitlab.\n\n[![Crates.io](https://img.shields.io/crates/v/git-task.svg)](https://crates.io/crates/fselect)\n[![build](https://github.com/jhspetersson/git-task/actions/workflows/rust.yml/badge.svg)](https://github.com/jhspetersson/git-task/actions/workflows/rust.yml)\n\n![](https://github.com/jhspetersson/git-task/blob/master/resources/gt2.gif)\n\n\n[Installation](#installation)  \n[Concepts](#concepts)  \n[Commands](#commands)  \n[Gitlab support](#gitlab-support)  \n\n\n## Installation\n\nBuild a binary, then add it as a git command:\n\n    cargo install git-task\n    git config --global alias.task '!~/.cargo/bin/git-task'\n\nNow you can switch to some git repo and run it as:\n\n    git task create \"My first task\"\n\nOr import issues from GitHub (`GITHUB_TOKEN` or `GITHUB_API_TOKEN` env variable might be needed to be set up if you have a private repository)\nor Gitlab (`GITLAB_TOKEN` or `GITLAB_API_TOKEN` is needed then):\n\n    git task pull\n\n## Concepts\n\n`git-task` maintains a collection of tasks, which are essentially an integer ID and a set of properties.\n\nSome properties are special: `name`, `description`, `author`, `created` and `status`. You can add custom properties for every task.\nIt's possible to define conditional color highlighting depending on the value of the property. \n\nTasks can have comments that are also addressed by their ID.\n\nStatus can be anything, but it is expected to be one of the several defined statuses. \nBy default, there are three: `OPEN` for new tasks, `IN_PROGRESS` for the tasks that are in development, `CLOSED` for complete ones.\nYou can freely edit this list.\n\nHowever, for the sake of sync with GitHub or Gitlab there are two config options to map remote `OPEN` and `CLOSED` statuses with local ones.\n\nTasks can also have labels that are optionally synchronized with GitHub or Gitlab.\n\n## Commands\n\n### list\n\nLists all tasks.\n\n    git task list\n\nShow only open tasks:\n\n    git task list -s o\n    git task list --status o\n\nShow only closed tasks:\n\n    git task list -s c\n\nShow only tasks with a custom status:\n\n    git task list --status DEPLOYED\n\nShow tasks that are new or in progress:\n\n    git task list -s OPEN,IN_PROGRESS\n    git task list -s o,i\n\nFilter by keyword:\n\n    git task list -k linux\n\nFilter by date:\n\n    git task list --from 2024-01-01\n    git task list --until 2023-12-31\n\nFilter by author:\n\n    git task list --author jhspetersson\n\nShow specific columns:\n\n    git task list --columns id,status,name\n\nSorting by one or more task properties:\n\n    git task list --sort author\n    git task list --sort \"status, created desc\"\n\nLimit displayed task count:\n\n    git task list -l 10\n    git task list --limit 5\n\n### show\n\nShows one task with all the properties (like id, name, status, description and a bunch of custom ones, actually, you can add whatever you like).\n\n    git task show 1\n\n### create\n\nCreates a new task.\n\n    git task create \"Fix my Fizz Buzz implementation\"\n    git task create \"Task title\" \"Task description\"\n    git task create \"This task goes without description\" --no-desc\n    git task create \"Create a task and push it to GitHub\" --push\n\n### status\n\nUpdates task status.\n\n    git task status 1 IN_PROGRESS\n    git task status 1 i\n    git task status 2..5,10,12 c\n\n### get\n\nPrints task property.\n\n    git task get 1 description\n\n### set\n\nSets task property:\n\n    git task set 1 description \"I figured it out all wrong. Fizz Buzz has to be rewritten in Rust!\"\n    git task set 1..10 priority HIGH\n\n### replace\n\nSearch and replace within property values:\n\n    git task replace 1..10 description \"Acme\" \"ACME Corp.\"\n    git task replace 1..10 description \"Acme\" \"ACME Corp.\" --push\n\n### unset\n\nDelete a property:\n\n    git task unset 1 foo\n    git task unset 1..10 foo\n\n### edit\n\nEdit task property in the default git editor.\n\n    git task edit 1 description\n\nFor Windows, we recommend anything, but `notepad`. `Notepad++` is just fine.\nYou can set it up this way:\n\n    git config --global core.editor \"C:\\\\Program Files\\\\Notepad++\\\\notepad++.exe\"\n\n### label\n\nAdd and remove labels from tasks. Labels can be synchronized with GitHub and Gitlab repositories.\n\n    git task label add 10 important ff6633 --desc 'Beware of this task!' --push\n    git task lbl del 10 important\n\n### comment\n\nAdd, edit or remove comments:\n\n    git task comment add 1 \"This is a comment to my first task\"\n    git task comment edit 1 1\n    git task comment del 1 1\n\nYou can sync comments with the remote source:\n\n    git task comment edit 159 2334900009 --push\n\n### import\n\nImport all or selected tasks from JSON file.\n\n    git task import \u003cmy_tasks.json\n    git task import 2,3,4,5,10,12 \u003cmy_tasks.json\n    git task import 2..5,10,12 \u003cmy_tasks.json\n\n### export\n\nExport all or selected tasks, only JSON output format is currently supported.\n\n    git task export\n    git task export --pretty 2,3,4,5,10,12 \u003emy_tasks.json\n    git task export --pretty 2..5,10,12 \u003emy_tasks.json\n    git task export --status o,i\n    git task export --limit 50\n\n### pull\n\nGrab issues from remote source (currently, only GitHub is supported).\nFor private repositories you have to set up `GITHUB_TOKEN` or `GITHUB_API_TOKEN` environment variable for GitHub.\n`GITLAB_TOKEN` or `GITLAB_API_TOKEN` are required for Gitlab-hosted repositories.\n\n    git task pull\n    git task pull --no-comments\n    git task pull 2,3,4,5,10,12\n    git task pull 2..5,10,12\n    git task pull --limit 50\n\nPull only open issues:\n\n    git task pull -s o\n    git task pull --status OPEN\n\n### push\n\nPush status of the selected tasks to the remote source.\nFor GitHub you have to set up `GITHUB_TOKEN` or `GITHUB_API_TOKEN` environment variable.\n`GITLAB_TOKEN` or `GITLAB_API_TOKEN` are required for Gitlab-hosted repositories.\n\n    git task push 2,3,4,5,10,12\n    git task push 2..5,10,12\n\n### stats\n\nShow total task count, count by status and top 10 authors.\n\n    git task stats\n\n### delete\n\nDeletes one or more tasks by their IDs or status.\n\n    git task delete 1\n    git task delete 2,3,4,5,10,12\n    git task delete 2..5,10,12\n    git task delete -s CLOSED\n    git task delete -s c\n\nAlso delete a corresponding GitHub issue:\n\n    git task delete 120 --push\n\n### clear\n\nDeletes all tasks.\n\n    git task clear\n\n### config\n\nMaintain configuration parameters.\n\n    git task config list\n    git task config get task.list.columns\n    git task config get task.list.sort\n    git task config get task.status.open\n    git task config get task.status.closed\n    git task config get task.ref\n\nCustomize sorting:\n\n    git task config set task.list.sort \"created desc\"\n\nCustomize columns:\n\n    git task config set task.list.columns id,author,status,name\n\nBy default `git-task` saves everything under a custom ref. You can change that to a regular branch like this:\n\n    git task config set task.ref refs/heads/tasks\n\nRemove old ref after setting a new one:\n\n    git task config set task.ref refs/heads/tasks --move\n\nConfigure task statuses:\n\n    git task config status list\n    git task config status set CLOSED color Magenta\n    git task config status set CLOSED name FINISHED\n    git task config status set FINISHED shortcut f\n    git task config status set FINISHED style bold,italic\n    git task config set task.status.closed FINISHED\n\nColors available:\n\n    Black, DarkGray, Red, LightRed, Green, LightGreen, Yellow, LightYellow, Blue, LightBlue, Purple, LightPurple, Magenta, LightMagenta, Cyan, LightCyan, White, LightGray\n\nOr one-byte value like:\n    \n    239\n\nStyles available:\n\n    bold, dimmed, italic, normal, strikethrough, underline\n\nAdd and delete statuses:\n\n    git task config status add ARCHIVE a Magenta true\n    git task config status delete ARCHIVE\n    git task config status delete a\n\nYou can export status config, edit it manually and import it back:\n\n    git task config status export --pretty \u003estatuses.json\n    git task config status import \u003cstatuses.json\n\nIf everything went wrong:\n\n    git task config status reset\n\nConfigure known task properties (you can add any other if you wish to any task):\n\n    git task config props add client_name string Cyan\n    git task config props set client_name color Blue\n    git task config props delete client_name\n\nYou can also set up their own colors for specific values of the properties (assuming you've already added `priority` property):\n\n    git task config prop enum add priority HIGH Red\n    git task config prop enum get priority HIGH color\n    git task config prop enum set priority HIGH Magenta bold\n    git task config prop enum list priority    \n    git task config prop enum del priority HIGH\n\nYou can go even further and set up conditional formatting (color and style) to any property depending on a boolean expression.\nExpression language used: [evalexpr](https://github.com/ISibboI/evalexpr).\n\nTask properties are automatically exported to the evaluation context as string or integer values.\n\nFor example, we want task ID and names to be rendered with dark gray color and strikethrough style if the status is `CLOSED` \n(like they do it in JetBrains products, e.g. YouTrack):\n\n    git task cfg prop cond add id \"status == \\\"CLOSED\\\"\" DarkGray strikethrough\n    git task cfg prop cond add name \"status == \\\"CLOSED\\\"\" DarkGray strikethrough\n\nConditional formatting has a precedence over enum values, which supersede default color and style of the defined property. \n\nClear conditional formatting:\n\n    git task cfg prop cond clear id\n    git task cfg prop cond clear name\n\nYou can also export, manually edit and import back task properties configuration.\n\n    git task config props export\n    git task config props import\n    git task config props reset\n\n### help\n\nShow available commands or their arguments:\n\n    git task help\n    git task help create\n\n## Gitlab support\n\nFor any operation you will need to set up `GITLAB_TOKEN` or `GITLAB_API_TOKEN` environment variable.\n\nFor custom domains please set up `GITLAB_URL` variable. Alternatively you can set the custom domain in git config:\n\n    git task config set task.gitlab.url gitlab.kitware.com\n\n## License\n\nMIT\n\n---\n\nSupported by [JetBrains IDEA](https://jb.gg/OpenSourceSupport) open source license\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhspetersson%2Fgit-task","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjhspetersson%2Fgit-task","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhspetersson%2Fgit-task/lists"}