{"id":13895102,"url":"https://github.com/rafi/gits","last_synced_at":"2025-04-14T03:23:26.287Z","repository":{"id":49374709,"uuid":"155995820","full_name":"rafi/gits","owner":"rafi","description":"A Fast CLI Git manager for multiple repositories","archived":false,"fork":false,"pushed_at":"2024-12-17T18:22:37.000Z","size":378,"stargazers_count":49,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-10T04:05:41.062Z","etag":null,"topics":["git","golang","helper","multiplatform","productivity"],"latest_commit_sha":null,"homepage":"","language":"Go","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/rafi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2018-11-03T15:22:53.000Z","updated_at":"2025-01-26T14:15:19.000Z","dependencies_parsed_at":"2023-12-09T09:23:42.667Z","dependency_job_id":"ee9d6abd-029f-4a0d-a90b-d0499f616136","html_url":"https://github.com/rafi/gits","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafi%2Fgits","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafi%2Fgits/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafi%2Fgits/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafi%2Fgits/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rafi","download_url":"https://codeload.github.com/rafi/gits/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248814173,"owners_count":21165706,"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","helper","multiplatform","productivity"],"created_at":"2024-08-06T18:01:59.692Z","updated_at":"2025-04-14T03:23:26.253Z","avatar_url":"https://github.com/rafi.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# gits\n\n\u003e Git manager for multiple repositories with GitHub/GitLab/Bitbucket support.\n\n![gits animated overview](http://rafi.io/img/project/gits/overview.gif)\n\n\u003c!-- vim-markdown-toc GFM --\u003e\n\n- [Features](#features)\n- [Install](#install)\n- [Usage](#usage)\n- [Configuration](#configuration)\n- [Config Examples](#config-examples)\n\n\u003c!-- vim-markdown-toc --\u003e\n\n## Features\n\nUse as a git clone manager, and while developing on multiple git repositories.\n\n- [x] GitHub/GitLab/Bitbucket/filesystem support with cache\n- [x] Interactive browsing of projects/repositories/branches/tags\n- [x] Clone/fetch/pull for multiple repositories\n- [x] Show one-line status with icons for all repositories\n- [x] List projects as table/tree/json/name\n- [x] Checkout branches interactively\n- [x] Configurable by YAML/JSON/TOML\n\n## Install\n\nOn macOS with Homebrew:\n\n```bash\nbrew install rafi/tap/gits\n```\n\nOr install `gits` with Go:\n\n```bash\ngo install github.com/rafi/gits\n```\n\n## Usage\n\nUsage: `gits [command] \u003cproject\u003e`\n\nAvailable Commands:\n\n- `add` —      Add repository to a project\n- `browse` —   Browse branches and tags\n- `cd` —       Get repository path\n- `checkout` — Traverse repositories and optionally checkout branch\n- `clone` —    Clone all repositories for specified project(s)\n- `fetch` —    Fetch and prune from all remotes\n- `help` —     Help about any command\n- `list` —     List all projects or their repositories\n- `orphan` —   Finds orphan repository\n- `pull` —     Pull repositories\n- `status` —   Shows Git repositories short status\n- `sync` —     Synchronize project caches\n- `version` —  Shows current version\n\n`gits` is configured by a YAML file. See [examples](#config-examples). `gits`\nwill look for a config file at `~/.gits.yaml` or\n`$XDG_CONFIG_HOME/gits/.git.yaml`.\n\nYou can run `gits` with project names as arguments, or a local path to a\ndirectory containing multiple projects.\n\nExamples:\n\n```bash\ngits                # list all commands\ngits list           # list all projects\ngits list acme      # list all project 'acme' repositories\n\ngits status acme    # show status for project 'acme' repositories\ngits status ~/code  # show status for all repositories at path\ngits status .       # show status for all repositories at current path\n```\n\nTo use `gits cd` — source [./contrib/cdgit.sh](./contrib/cdgit.sh) in your shell\n`~/.bashrc` or `~/.zshrc`, and use `cdgit` to navigate to a repository.\n\n## Configuration\n\nConfiguration file must be present at `~/.gits.yaml` or `$XDG_CONFIG_HOME/gits/.gits.yaml`.\n\n\u003e [!WARNING]\n\u003e Each project in config file can either have a `source` or `repos` key, not both.\n\nThe structure of the config file is as follows:\n\n```yaml\n---\n# ~/.gits.yaml\n\n# Project definition\nprojectname:          # Project name\n  desc: My projects   # Optional\n  path: ~/code/github # Optional if 'repos' are specified and have absolute paths.\n  source:             # Required if no 'repos' defined, default: filesystem\n    type: github      # Required: github|gitlab|bitbucket|filesystem\n    search: rafi      # Required search query (organization, user name, group id)\n  repos:              # Required if no 'source' defined\n    - dir: foo        # Optional, default: repository name\n      src: git@...    # Optional, default: repository remote URL\n    - ...\n\nanotherproject:\n  ...\n```\n\n## Config Examples\n\nEach project in the following example is defined differently:\n\n```yaml\n---\n# ~/.gits.yaml\n\n# Github source.\nmygithub:\n  source:\n    type: github\n    search: rafi\n\n# GitLab source, note that `path` and `desc` are optional.\nwork:\n  path: ~/code/work\n  desc: My work GitLab projects\n  source:\n    type: gitlab\n    search: \"12345678\"  # Make sure GitLab group id is quoted\n\n# Bitbucket source.\nmybitbucket:\n  source:\n    type: bitbucket\n    search: rafi\n\n# Filesystem source that will be searched recursively.\nexplore:\n  desc: Exploring projects\n  path: ~/code/explore\n  source:\n    type: filesystem\n\n# Relative directory name and implicit remote source URL.\nacme:\n  path: ~/code/acme\n  desc: Acme is a really cool app.\n  repos:\n  - dir: admin\n  - dir: ant-design-pro\n  - dir: api\n  - dir: infra\n  - dir: ios\n  - dir: react-native\n  - dir: web\n  - dir: webapp\n\n# Relative directory name and explicit remote source URL.\nmyapp:\n  path: ~/code/myapp\n  repos:\n  - dir: api                             # Can be absolute or relative to path\n    src: https://github.com/app/api.git  # Optional remote clone URL\n  - dir: ios\n    src: https://github.com/app/ios.git\n  - dir: android\n    src: https://github.com/app/android.git\n\n# Absolute directories and explicit remote source URL. (No project path)\nrafi:\n  desc: My dotfiles\n  repos:\n  - dir: ~/.config\n    src: git@github.com:rafi/.config.git\n  - dir: ~/.config/nvim\n    src: git@github.com:rafi/vim-config.git\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafi%2Fgits","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafi%2Fgits","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafi%2Fgits/lists"}