{"id":26395714,"url":"https://github.com/tamada/rrh","last_synced_at":"2025-06-13T10:35:35.127Z","repository":{"id":36587756,"uuid":"164185528","full_name":"tamada/rrh","owner":"tamada","description":"Remote Repositories Head/Repositories Ready to Hack","archived":false,"fork":false,"pushed_at":"2024-05-22T23:50:05.000Z","size":1317,"stargazers_count":7,"open_issues_count":6,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-30T22:28:16.082Z","etag":null,"topics":["git","golang","repository-management"],"latest_commit_sha":null,"homepage":"https://tamada.github.io/rrh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tamada.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2019-01-05T05:37:43.000Z","updated_at":"2025-05-30T04:21:14.000Z","dependencies_parsed_at":"2025-05-30T16:56:41.400Z","dependency_job_id":"8fb7877a-2ff3-4c58-b178-67934b2461eb","html_url":"https://github.com/tamada/rrh","commit_stats":{"total_commits":266,"total_committers":1,"mean_commits":266.0,"dds":0.0,"last_synced_commit":"f918d4539cc63b708995f8f3f2c53b8fa1f4a823"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/tamada/rrh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Frrh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Frrh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Frrh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Frrh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tamada","download_url":"https://codeload.github.com/tamada/rrh/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Frrh/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259627852,"owners_count":22886934,"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":["git","golang","repository-management"],"created_at":"2025-03-17T11:19:04.619Z","updated_at":"2025-06-13T10:35:35.089Z","avatar_url":"https://github.com/tamada.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RRH\n\nRRH is a simple git repository manager.\n\n[![Build Status](https://github.com/tamada/rrh/workflows/build/badge.svg?branch=master)](https://github.com/tamada/rrh/actions?workflow=build)\n[![Coverage Status](https://coveralls.io/repos/github/tamada/rrh/badge.svg?branch=master)](https://coveralls.io/github/tamada/rrh?branch=master)\n[![codebeat badge](https://codebeat.co/badges/15e04551-d448-4ad3-be1d-e98b1e586f1a)](https://codebeat.co/projects/github-com-tamada-rrh-master)\n[![go report](https://goreportcard.com/badge/github.com/tamada/rrh)](https://goreportcard.com/report/github.com/tamada/rrh)\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-information.svg)](https://github.com/tamada/rrh/blob/master/LICENSE)\n[![Version](https://img.shields.io/badge/Version-2.0.0-information.svg)](https://github.com/tamada/rrh/releases/tag/v2.0.0)\n\n\n## Table of contents\n\n- [Description](#description)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Development](#development)\n- [Utilities](#utilities)\n- [About the Project](#about-the-project)\n- [Table of contents](#table-of-contents)\n\n## Description\n\nThere are too many repositories.\nWe love programming; however, to manage many repositories is quite hard and bothersome tasks.\nTherefore, we built a headquarter for managing the git repositories, named RRH.\nRRH manages repositories by categorizing in groups and execute git command to the groups.\n\nI know the tool [ghq](https://github.com/motemen/ghq), manages the git repositories.\nHowever, I cannot use it for the following reasons.\n\n1. there are quite many repositories in my home directory.\n   - To start using ghq, we clone the repositories.\n     However, I did not accept to clone all of the repositories.\n2. The location of repositories is fixed in the config file and is accepted only one location.\n   - I decide the directory layout in my home directory.\n\nAdditionally, I edit several repositories in a day, when I work hard.\nConsequently, the progress of each repository is obscured; I cannot remember a lot of things.\nTherefore, it is glad to see the last modified date of branches.\n\nRRH is now growing. Please hack RRH itself.\n\n## Installation\n\n### Homebrew\n\nInstall rrh via [Homebrew](https://brew.sh), simply run:\n\n```sh\n$ brew tap tamada/brew\n$ brew install rrh\n```\n\n### Golang\n\nTo install by cli, simply run:\n\n```sh\n$ go get git@github.com/tamada/rrh.git\n```\n\n### Requirements\n\n- Runtime\n  - Bash 4.x or after, for completion.\n    - [zsh](http://www.zsh.org/)?, and [fish](https://fishshell.com/)?, I do not use them, so I do not know.\n    - For macOS user, the default shell of the macOS is bash 3.x, therefore, the completion is not work enough.\n      - `rrh` is maybe work on Windows, and Linux. I do not use them.\n- Development\n  - Go 1.12\n  - See `go.mod`\n\n### For 1.x.x Users\n\n`rrh` updates the default config and database paths from `\"${HOME}/.rrh\"` to `\"${HOME}/.config/rrh\"`.\nTherefore, please move the previous database and config to the new location by executing `rrh migrate 1.x.x`.\n\n## Usage\n\n### Getting started\n\nRRH has various subcommands, however, `list` and `add` subcommand make you happy.\n\n- `rrh list` shows managed repositories.\n- `rrh add \u003cREPO\u003e` adds the given repository under the RRH management.\n- type [`cdrrh`](#cdrrh) on Terminal, then type TAB, TAB, TAB!\n\n### Command references\n\n```sh\nrrh [GLOBAL OPTIONS] \u003cSUB COMMANDS\u003e [ARGUMENTS]\nGLOBAL OPTIONS\n    -h, --help                        print this message.\n    -v, --version                     print version.\n    -c, --config-file \u003cCONFIG_FILE\u003e   specifies the config file path.\nAVAILABLE SUB COMMANDS:\n    add          add repositories on the local path to RRH.\n    clone        run \"git clone\" and register it to a group.\n    config       set/unset and list configuration of RRH.\n    export       export RRH database to stdout.\n    fetch        run \"git fetch\" on the given groups.\n    fetch-all    run \"git fetch\" in the all repositories.\n    group        add/list/update/remove groups and show groups of the repository.\n    help         print this message.\n    import       import the given database.\n    list         print managed repositories and their groups.\n    mv           move the repositories from groups to another group.\n    open         open folder or web page of the given repositories.\n    prune        prune unnecessary repositories and groups.\n    repository   manages repositories.\n    rm           remove given repository from database.\n    status       show git status of repositories.\n    version      show version.\n```\n\nIf the user specified an unknown subcommand (e.g., `rrh helloworld`), `rrh` treats it as an **external command**.\nIn that case, `rrh` searches an executable file named `rrh-helloworld` from the PATH environment variable.\nIf `rrh` found it, `rrh` executes it, if not found, `rrh` prints help and exit.\n\n### Subcommands\n\n#### `rrh add`\n\nRegisters the repositories which specified the given paths to the RRH database and categorize to the group (Default `no-group`, see [`RRH_DEFAULT_GROUP_NAME`](#rrh_default_group_name)).\n\n```sh\nrrh add [OPTIONS] \u003cREPOSITORY_PATHS...\u003e\nOPTIONS\n    -g, --group \u003cGROUP\u003e        add repository to RRH database.\n    -r, --repository-id \u003cID\u003e   specified repository id of the given repository path.\n                               Specifying this option fails with multiple arguments.\nARGUMENTS\n    REPOSITORY_PATHS           the local path list of the git repositories.\n```\n\n#### `rrh clone`\n\nRuns `git clone` command and registers the cloned repository to RRH database.\nThe following steps identify the id of the repository.\n\n1. If the length of `REMOTE_REPOS` is 1, and `DEST` exists, then the last entry of `REMOTE_REPOS` is repository id by eliminating the suffix `.git`.\n2. If the length of `REMOTE_REPOS` is 1, and `DEST` does not exist, then the last entry of `DEST` is repository id.\n3. If the length of `REMOTE_REPOS` is greater than 1, then the last entry of each `REMOTE_REPOS` is repository ids by eliminating the suffix `.git`.\n\n```sh\nrrh clone [OPTIONS] \u003cREMOTE_REPOS...\u003e\nOPTIONS\n    -g, --group \u003cGROUP\u003e   print managed repositories categoried in the group.\n    -d, --dest \u003cDEST\u003e     specify the destination. Default is the current directory.\nARGUMENTS\n    REMOTE_REPOS          repository urls\n```\n\nThe destination of cloned repository is located based on [`RRH_CLONE_DESTINATION`](#rrh_clone_destination)\n\n#### `rrh config`\n\nHandles the operations of configuration/environment variables.\nThis subcommand requires sub-sub-command.\nIf sub-sub-command was not specified, it runs `list` sub-sub-command.\n\n```sh\nrrh config \u003cCOMMAND\u003e [ARGUMENTS]\nCOMMAND\n    set \u003cENV_NAME\u003e \u003cVALUE\u003e  set ENV_NAME to VALUE\n    unset \u003cENV_NAME\u003e        reset ENV_NAME\n    list                    list all of ENVs (default)\n```\n\n#### `rrh export`\n\nExports the data of RRH database by JSON format.\n\n```sh\nrrh export [OPTIONS]\nOPTiONS\n    --no-indent      print result as no indented json\n    --no-hide-home   not replace home directory to '${HOME}' keyword\n```\n\n#### `rrh fetch`\n\nRuns `git fetch` command in the repositories of the specified group.\n\n```sh\nrrh fetch [OPTIONS] [GROUPS...]\nOPTIONS\n    -r, --remote \u003cREMOTE\u003e   specify the remote name. Default is \"origin.\"\nARGUMENTS\n    GROUPS                  run \"git fetch\" command on each repository on the group.\n                            if no value is specified, run on the default group.\n```\n\n#### `rrh fetch-all`\n\nRuns `git fetch` command in all repositories of managing in RRH.\nThis command may make heavy network traffic; therefore, we do not recommend to run.\n\n```sh\nrrh fetch-all [OPTIONS]\nOPTIONS\n    -r, --remote \u003cREMOTE\u003e   specify the remote name. Default is \"origin.\"\n```\n\n#### `rrh group`\n\nHandles the operations of groups of RRH.\nThis subcommand requires sub-sub-command.\nIf sub-sub-command was not specified, it runs `list` sub-sub-command.\n\n```sh\nrrh group \u003cSUBCOMMAND\u003e\nSUBCOMMAND\n    add       add new group.\n    info      show information of specified groups.\n    list      list groups (default).\n    of        shows groups of the specified repository.\n    rm        remove group.\n    update    update group.\n```\n\n##### `rrh group add`\n\nAdds new group to the RRH database.\n\n```sh\nrrh group add [OPTIONS] \u003cGROUPS...\u003e\nOPTIONS\n    -d, --desc \u003cDESC\u003e        gives the description of the group.\n    -o, --omit-list \u003cFLAG\u003e   gives the omit list flag of the group.\nARGUMENTS\n    GROUPS                   gives group names.\n```\n\n##### `rrh group info`\n\nShow information of specified groups.\n\n```sh\nrrh group info \u003cGROUPS...\u003e\nARGUMENTS\n    GROUPS           group names to show the information.\n```\n\n##### `rrh group list`\n\nDisplays group list.\n\n```sh\nrrh group list [OPTIONS]\nOPTIONS\n    -d, --desc             show description.\n    -r, --repository       show repositories in the group.\n    -o, --only-groupname   show only group name. This option is prioritized.\n```\n\n##### `rrh group of`\n\nDisplays group of the specified repositories.\n\n```sh\nrrh group of \u003cREPOSITORY_ID\u003e\nARGUMENTS\n    REPOSITORY_ID     show the groups of the repository.\n```\n\n##### `rrh group rm`\n\nRemoves groups.\n\n```sh\nrrh group rm [OPTIONS] \u003cGROUPS...\u003e\nOPTIONS\n    -f, --force      force remove.\n    -i, --inquery    inquiry mode.\n    -v, --verbose    verbose mode.\nARGUMENTS\n    GROUPS           target group names.\n```\n\n##### `rrh group update`\n\nUpdate the information of specified group.\n\n```sh\nrrh group update [OPTIONS] \u003cGROUP\u003e\nOPTIONS\n    -n, --name \u003cNAME\u003e        change group name to NAME.\n    -d, --desc \u003cDESC\u003e        change description to DESC.\n    -o, --omit-list \u003cFLAG\u003e   change omit-list of the group. FLAG must be \"true\" or \"false\".\nARGUMENTS\n    GROUP                    update target group names.\n```\n\n#### `rrh help`\n\nPrints the help message.\n\n```sh\nrrh help [ARGUMENTS...]\nARGUMENTS\n    print help message of target command.\n```\n\n#### `rrh import`\n\nImport the database to the local environment.\n\n```sh\nrrh import [OPTIONS] \u003cDATABASE_JSON\u003e\nOPTIONS\n    --auto-clone    clone the repository, if paths do not exist.\n    --overwrite     replace the local RRH database to the given database.\n    -v, --verbose   verbose mode.\nARGUMENTS\n    DATABASE_JSON   the exported RRH database.\n```\n\n#### `rrh list`\n\nPrints the repositories of managing in RRH.\n\n```sh\nrrh list [OPTIONS] [GROUPS...]\nOPTIONS\n    -d, --desc          print description of group.\n    -p, --path          print local paths (default).\n    -r, --remote        print remote urls.\n    -A, --all-entries   print all entries of each repository.\n\n    -a, --all           print all repositories, no omit repositories.\n    -c, --csv           print result as csv format.\nARGUMENTS\n    GROUPS    print managed repositories categorized in the groups.\n              if no groups are specified, all groups are printed.\n```\n\n#### `rrh mv`\n\nMove repositories to another group.\n\n```sh\nrrh mv [OPTIONS] \u003cFROMS...\u003e \u003cTO\u003e\nOPTIONS\n    -v, --verbose   verbose mode\n\nARGUMENTS\n    FROMS...        specifies move from, formatted in \u003cGROUP_NAME/REPO_ID\u003e, or \u003cGROUP_NAME\u003e\n    TO              specifies move to, formatted in \u003cGROUP_NAME\u003e\n```\n\n#### `rrh open`\n\nOpens folder or web page of the given repositories.\n\n```sh\nrrh open [OPTIONS] \u003cREPOSITORIES...\u003e\nOPTIONS\n    -f, --folder     open the folder of the specified repository (Default).\n    -w, --webpage    open the webpage of the specified repository.\n    -h, --help       print this message.\nARGUMENTS\n    REPOSITORIES     specifies repository names.\n```\n\n#### `rrh prune`\n\nDeletes unnecessary groups and repositories.\nThe unnecessary groups are no repositories in them.\nThe unnecessary repositories are to have an invalid path.\n\n```sh\nrrh prune\n```\n\n#### `rrh repository`\n\nPrints/Updates the repository.\n\n```sh\nrrh repository \u003cSUBCOMMAND\u003e\nSUBCOMMAND\n    info [OPTIONS] \u003cREPO...\u003e     shows repository information.\n    update [OPTIONS] \u003cREPO...\u003e   updates repository information.\n    update-remotes [OPTIONS]     update all remote entries.\n```\n\n##### `rrh repository info`\n\nprints the repository information.\n\n```sh\nrrh repository info [OPTIONS] [REPOSITORIES...]\n    -G, --color     prints the results with color.\n    -c, --csv       prints the results in the csv format.\nARGUMENTS\n    REPOSITORIES    target repositories.  If no repositories are specified,\n                    this sub command failed.\n```\n\n##### `rrh repository update`\n\nupdate the information of the repository.\n\n```sh\nrrh repository update [OPTIONS] \u003cREPOSITORY\u003e\nOPTIONS\n    -i, --id \u003cNEWID\u003e     specifies new repository id.\n    -d, --desc \u003cDESC\u003e    specifies new description.\n    -p, --path \u003cPATH\u003e    specifies new path.\nARGUMENTS\n    REPOSITORY           specifies the repository id.\n```\n\n##### `rrh repository update-remotes`\n\nupdate remote entries in the all repositories.\n\n```sh\nrrh repository update-remotes [OPTIONS]\nOPTIONS\n    -d, --dry-run    dry-run mode.\n    -v, --verbose    verbose mode.\n```\n\n#### `rrh rm`\n\nRemoves the specified groups, repositories, and relations.\nIf the group has entries is removed by specifying the option `--recursive.`\n\n```sh\nrrh rm [OPTIONS] \u003cREPO_ID|GROUP_ID|GROUP_ID/REPO_ID...\u003e\nOPTIONS\n    -i, --inquiry       inquiry mode.\n    -r, --recursive     recursive mode.\n    -v, --verbose       verbose mode.\n\nARGUMENTS\n    REPOY_ID            repository name for removing.\n    GROUP_ID            group name. if the group contains repositories,\n                        removing will fail without '-r' option.\n    GROUP_ID/REPO_ID    remove the relation between the given REPO_ID and GROUP_ID.\n```\n\n#### `rrh status`\n\nPrints the last modified times of each branch in the repositories of the specified group.\n\n```sh\nrrh status [OPTIONS] [GROUPS|REPOS...]\nOPTIONS\n    -b, --branches  show the status of the local branches.\n    -r, --remote    show the status of the remote branches.\n    -c, --csv       print result in csv format.\nARGUMENTS\n    GROUPS          target groups.\n    REPOS           target repositories.\n                    If no arguments were specified, this command\n                    shows the result of default group.\n```\n\n#### `rrh version`\n\nPrints `rrh` version.\n\n```sh\nrrh version\n```\n\n### Environment variables\n\nWe can see those variables by running `rrh config` sub-command.\n\n#### `RRH_HOME`\n\n- specifies the location of the RRH database and config file.\n- Default: `/Users/tamada/.rrh`\n\n#### `RRH_CONFIG_PATH`\n\n- specifies the location of the location path.\n  - RRH ignores to specify `RRH_CONFIG_PATH` in the config file.\n    This variable availables only environment variable.\n- Default: `${RRH_HOME}/config.json`\n\n#### `RRH_DATABASE_PATH`\n\n- specifies the location of the database path.\n- Default: `${RRH_HOME}/database.json`\n\n#### `RRH_DEFAULT_GROUP_NAME`\n\n- specifies the default group name.\n- Default: `no-group`\n\n#### `RRH_CLONE_DESTINATION`\n\n- specifies the destination by cloning the repository.\n- Default: `.`\n\n#### `RRH_ON_ERROR`\n\n- specifies the behaviors of RRH on error.\n- Default: `WARN`\n- Available values: `FAIL_IMMEDIATELY`, `FAIL`, `WARN`, and `IGNORE`\n  - `FAIL_IMMEDIATELY`\n    - reports error immediately and quits RRH with a non-zero status.\n  - `FAIL`\n    - runs through all targets and reports errors if needed, then quits RRH with a non-zero status.\n  - `WARN`\n    - runs through all targets and reports errors if needed, then quits RRH successfully.\n  - `IGNORE`\n    - runs all targets and no reports errors.\n\n#### `RRH_TIME_FORMAT`\n\n- specifies the time format for `status` command.\n- Default: `relative`\n- Available value: `relative` and the time format for Go lang.\n  - `relative`\n    - shows times by humanized format (e.g., 2 weeks ago)\n  - Other strings\n    - regard as formatting layout and give to `Format` method of the time.\n      - see [Time.Format](https://golang.org/pkg/time/#Time.Format), for more detail.\n\n#### `RRH_AUTO_CREATE_GROUP`\n\n- specifies to create the group when the not existing group was specified, and it needs to create.\n- Default: false\n\n#### `RRH_AUTO_DELETE_GROUP`\n\n- specifies to delete the group when some group was no more needed.\n- Default: false\n\n#### `RRH_SORT_ON_UPDATING`\n\n- specifies to sort database entries on updating database.\n- Default: false\n\n#### `RRH_COLOR`\n\n- specifies the colors of the output.\n- Default: `\"repository:fg=red+group:fg=magenta+label:op=bold+configValue:fg=green\"`\n- Format: `\"repository:fg=\u003cCOLOR\u003e;bg=\u003cCOLOR\u003e;op=\u003cSTYLE\u003e+group:fg=\u003cCOLOR\u003e;bg=\u003cCOLOR\u003e;op=\u003cSTYLE\u003e+label:fg=\u003cCOLOR\u003e;bg=\u003cCOLOR\u003e;op=\u003cSTYLE\u003e+configValue:fg=\u003cCOLOR\u003e;bg=\u003cCOLOR\u003e;op=\u003cSTYLE\u003e\"`\n  - Available `COLOR`s\n    - red, cyan, blue, black, green, white, yellow, magenta.\n  - Available `STYLE`s\n    - bold, underscore.\n  - Delimiter of repository, group and label is `+`, delimiter of type and value is `:`, delimiter of each label is `;`, and delimiter of each value is `,`.\n- Examples:\n  - `RRH_COLOR: repository:fg=red+group:fg=cyan;op=bold,underscore`\n    - Repository: red, Group: cyan in bold with underscore.\n\n#### `RRH_ENABLE_COLORIZED`\n\n- specifies to colorize the output. The colors of output were specified on [`RRH_COLOR`](#rrh_color)\n- Default: false\n\n## Development\n\n### Database\n\nThe database for managed repositories is formatted in JSON.\nThe JSON format is as follows.\nThe JSON file is placed on `$RRH_HOME/database.json`.\nIf `$RRH_HOME` was not set, `$HOME/.rrh` is used as `$RRH_HOME`.\nAlso, the configuration file is on `$RRH_HOME/config.json`\n\n```js\n{\n    last-modified: '2019-01-01T',\n    repositories: [\n        {\n            repository_id: 'rrh', // unique key of repository.\n            repository_path: 'absolute/path/of/repository',\n            repository_desc: 'description of the repository.',\n            remotes: [\n                {\n                    Name: \"origin\",\n                    URL: \"git@github.com:tamada/rrh.git\"\n                }\n            ]\n        },\n        ....\n    ]\n    groups: [\n        {\n            group_name: 'no-group',\n            group_desc: 'The description of the group.',\n            omit_list: false\n        },\n        ....\n    ],\n    relations: [\n        {\n            repository_id: 'rrh',\n            group_name: 'no-group'\n        }\n    ]\n}\n```\n\n## Utilities\n\nWrite the following script to `$HOME/.bash_profile`, then restart shell, then we can use `cdrrh` and `rrhpeco` command in the terminal.\n\n### `cdrrh`\n\nchanges directory to the specified repository.\n\n```sh\ncdrrh(){\n    path=$(rrh repository list --path $1)\n    if [ $? -eq 0 ]; then\n        cd $path\n        pwd\n    else\n        echo \"$1: repository not found\"\n    fi\n}\n```\n\n### `rrhpeco`\n\nlist repositories, and filtering them by [`peco`](https://github.com/peco/peco),\nthen change directory to the filtering result.\n\n```sh\nrrhpeco(){\n  csv=$(rrh list --path --csv | peco)\n  cd $(echo $csv | awk -F , '{ print $3 }')\n  pwd\n}\n```\n\n## About the Project\n\n[![Contribution](https://img.shields.io/badge/RRH-Contribution-yellow.svg)](https://github.com/tamada/rrh/blob/master/CONTRIBUTION.md)\n[![Code of Conduct](https://img.shields.io/badge/RRH-Code_of_Conduct-orange.svg)](https://github.com/tamada/rrh/blob/master/CODE_OF_CONDUCT.md)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/tamada/rrh/blob/master/LICENSE)\n[![Gitter](https://img.shields.io/badge/Gitter-Join_Chat-red.svg)](https://gitter.im/rrh_git/community)\n[![Gitter misc_ja](https://img.shields.io/badge/Gitter-For_Japanese-red.svg)](https://gitter.im/rrh_git/misc_ja)\n\n### Contribution\n\n1. Fork the project. ([https://github.com/tamada/rrh/fork](https://github.com/tamada/rrh/fork))\n2. Create a feature branch. (`git checkout -b FEATURE_BRANCH_NAME`)\n3. Edit the source files and Commit your changes.\n4. Create tests and commit them.\n5. Rebase your local changes against the master branch.\n6. Run the test suite with the `make test` and confirm that passes.\n7. Create a new pull request.\n8. Confirm all checks pass.\n\n[See also the contribution guideline](https://github.com/tamada/rrh/blob/master/CONTRIBUTING.md).\n\n### Code of Conduct\n\n[![Code of Conduct](https://img.shields.io/badge/RRH-Code_of_Conduct-orange.svg)](https://github.com/tamada/rrh/blob/master/CODE_OF_CONDUCT.md)\n\n### License\n\n[Apache Version 2.0](https://github.com/tamada/rrh/blob/master/LICENSE)\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/tamada/rrh/blob/master/LICENSE)\n\n### Discussion\n\n[![Gitter](https://img.shields.io/badge/Gitter-Join_Chat-red.svg)](https://gitter.im/rrh_git/community)\n[![Gitter misc_ja](https://img.shields.io/badge/Gitter-For_Japanese-red.svg)](https://gitter.im/rrh_git/misc_ja)\n\nJoin our Gitter channel if you have any problem or suggestions to `rrh`.\n\nFor Japanese user, `misc_ja` channel has discussions in Japanese.\nThe public language of other channels and GitHub pages are English.\n\n### Author\n\n- [Haruaki Tamada](https://github.com/tamada)\n\n### Why the project name RRH\n\nAt first, the name of this project was GRIM (Git Repository Integrated Manager).\nHowever, the means of `grim` is not good, and there are many commands which start with `gr`.\nTherefore, we changed the project name to RRH.\nRRH means \"Repositories, Ready to Hack\" or \"Remote Repositories Head,\" are not the abbreviation of the Red Riding Hood.\n\n### Attributions\n\n#### Icon of RRH\n\n![icon of rrh](https://raw.githubusercontent.com/tamada/rrh/master/docs/static/favicon-64x64.png) by [iconpon.com](https://www.iconpon.com/)\n\n### Version histories\n\n- [v1.1.0](https://github.com/tamada/rrh/releases/tag/v2.0.0) (18 Dec, 2018)\n  - [\\#79](https://github.com/tamada/rrh/issues/79) (add `rrh group info` sub command)\n  - [\\#77](https://github.com/tamada/rrh/issues/77) (introduce `rrh repository update-remotes` sub command)\n  - [\\#81](https://github.com/tamada/rrh/issues/81) (introduce options for `rrh prune` command)\n- [v1.0.4](https://github.com/tamada/rrh/releases/tag/v2.0.0) (13 Jul, 2018)\n  - [\\#74](https://github.com/tamada/rrh/issues/74) (permission of created README.md by rrh-new was invalid (204))\n  - [\\#75](https://github.com/tamada/rrh/issues/75) (Introduce `--dry-run` option to `rrh new` command)\n- [v1.0.3](https://github.com/tamada/rrh/releases/tag/v2.0.0) (29 Jun, 2018)\n  - [\\#72](https://github.com/tamada/rrh/issues/72) (Print belonging groups on `rrh repository info`)\n- [v1.0.2](https://github.com/tamada/rrh/releases/tag/v2.0.0) (29 Jun, 2018)\n  - [\\#67](https://github.com/tamada/rrh/issues/67) (implements `rrh new` sub command)\n- [v1.0.1](https://github.com/tamada/rrh/releases/tag/v2.0.0) (26 Jun, 2018)\n  - [\\#68](https://github.com/tamada/rrh/issues/68) (`rrh group` prints `rrh config list`)\n- [v1.0.0](https://github.com/tamada/rrh/releases/tag/v2.0.0) (18 Jun, 2018)\n  - The first public release.\n\n## Table of Contents\n\n- [Description](#description)\n- [Installation](#installation)\n  - [Homebrew](#homebrew)\n  - [Golang](#golang)\n  - [Requirements](#requirements)\n- [Usage](#usage)\n  - [Getting started](#getting-started)\n  - [Command references](#command-references)\n  - [Subcommands](#subcommands)\n    - [`rrh add`](#rrh-add)\n    - [`rrh clone`](#rrh-clone)\n    - [`rrh config`](#rrh-config)\n    - [`rrh export`](#rrh-export)\n    - [`rrh fetch`](#rrh-fetch)\n    - [`rrh fetch-all`](#rrh-fetch-all)\n    - [`rrh group`](#rrh-group)\n    - [`rrh help`](#rrh-help)\n    - [`rrh import`](#rrh-import)\n    - [`rrh list`](#rrh-list)\n    - [`rrh mv`](#rrh-mv)\n    - [`rrh prune`](#rrh-prune)\n    - [`rrh repository`](#rrh-repository)\n    - [`rrh rm`](#rrh-rm)\n    - [`rrh status`](#rrh-status)\n    - [`rrh version`](#rrh-version)\n  - [Environment variables](#environment-variables)\n- [Development](#development)\n  - [Database](#database)\n- [Utilities](#utilities)\n  - [`cdrrh`](#cdrrh)\n  - [`rrhpeco`](#rrhpeco)\n- [About the Project](#about-the-project)\n  - [Contribution](#contribution)\n  - [Code of Conduct](#code-of-conduct)\n  - [License](#license)\n  - [Discussion](#discussion)\n  - [Author](#author)\n  - [Why the project name RRH?](#why-the-project-name-rrh)\n  - [Attributions](#attributions)\n  - [Version histories](#version-histories)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftamada%2Frrh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftamada%2Frrh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftamada%2Frrh/lists"}