{"id":50559884,"url":"https://github.com/ziyifast/gum","last_synced_at":"2026-06-04T11:30:18.540Z","repository":{"id":362204828,"uuid":"1257145564","full_name":"ziyifast/gum","owner":"ziyifast","description":"Switch Git identities in one command. Like nvm, but for Git.","archived":false,"fork":false,"pushed_at":"2026-06-03T04:38:35.000Z","size":2473,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T06:23:13.719Z","etag":null,"topics":["bash","cli","command-line","developer-tools","git","git-config","productivity","shell","ssh"],"latest_commit_sha":null,"homepage":"https://ziyifast.github.io/gum/","language":"Shell","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/ziyifast.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-02T12:05:46.000Z","updated_at":"2026-06-03T04:38:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ziyifast/gum","commit_stats":null,"previous_names":["ziyifast/gum"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ziyifast/gum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyifast%2Fgum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyifast%2Fgum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyifast%2Fgum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyifast%2Fgum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ziyifast","download_url":"https://codeload.github.com/ziyifast/gum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziyifast%2Fgum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33903134,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["bash","cli","command-line","developer-tools","git","git-config","productivity","shell","ssh"],"created_at":"2026-06-04T11:30:15.635Z","updated_at":"2026-06-04T11:30:18.529Z","avatar_url":"https://github.com/ziyifast.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"website/assets/brand/logo-128.png\" alt=\"gum logo\" width=\"120\"\u003e\n\n# GUM - Git User Manager\n\n**Switch Git identities in one command.**\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n[![Bash](https://img.shields.io/badge/Shell-Bash-blue.svg)](https://www.gnu.org/software/bash/)\n[![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey.svg)](#installation)\n[![Website](https://img.shields.io/badge/Website-ziyifast.github.io%2Fgum-purple.svg)](https://ziyifast.github.io/gum/)\n\n[**Website**](https://ziyifast.github.io/gum/) | [English](README.md) | [中文](README_CN.md)\n\n\u003c/div\u003e\n\n---\n\nA lightweight CLI tool to manage and switch between multiple Git identities (user.name, user.email, SSH keys). Like `nvm` for Node.js versions, but for Git accounts.\n\n## The Problem\n\n```bash\n# Every. Single. Day.\ngit config --global user.name \"zhangsan\"\ngit config --global user.email \"zhangsan@company.com\"\n# ... edit ~/.ssh/config ...\n# ... ssh-add the right key ...\n# 😤\n```\n\n## The Solution\n\n```bash\ngum use work    # Done. All of it.\ngum use home    # Back to personal. That's it.\n```\n\n## Demo\n\n```\n$ gum create work\n  Git user.name: zhangsan\n  Git user.email: zhangsan@tencent.com\n\n  Select SSH config: (↑/↓ select, Enter confirm)\n    ❯ git.woa.com (key: ~/.ssh/id_rsa)\n      github.com (key: ~/.ssh/id_rsa_github)\n      Configure manually\n\n  ✓ Profile 'work' created!\n\n$ gum use work\n  ✓ Switched to 'work' (global)\n    user.name  = zhangsan\n    user.email = zhangsan@tencent.com\n    ssh.host   = git.woa.com\n```\n\n## Features\n\n- **One-command switching**: `gum use work` / `gum use home`\n- **Quick setup**: `gum init` creates work \u0026 home profiles in one flow\n- **Smart detection**: Auto-reads existing `~/.ssh/config` entries\n- **Interactive UI**: Arrow key selection (↑/↓/j/k) for all menus\n- **SSH key management**: Auto-generates ed25519 keys\n- **Non-destructive**: SSH config managed via marker comments, your entries stay untouched\n- **Scope control**: Global (`--global`) or per-repo (`--local`)\n- **Customizable**: `~/.gum/config` for your own defaults\n- **Zero dependencies**: Pure Bash, works on macOS and Linux\n\n## Installation\n\nChoose your preferred method:\n\n### One-line install (curl | bash)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/ziyifast/gum/main/packaging/install-remote.sh | bash\n```\n\n### Homebrew (macOS / Linux)\n\nOne-liner:\n\n```bash\nbrew install ziyifast/tap/gum\n```\n\nOr in two steps if you prefer:\n\n```bash\nbrew tap ziyifast/tap\nbrew install gum\n```\n\n### apt-get (Debian / Ubuntu)\n\nDownload the `.deb` from [Releases](https://github.com/ziyifast/gum/releases):\n\n```bash\nwget https://github.com/ziyifast/gum/releases/latest/download/gum_1.1.0_all.deb\nsudo dpkg -i gum_1.1.0_all.deb\n```\n\n### Scoop (Windows)\n\nRequires [Git for Windows](https://git-scm.com/download/win) (provides Git Bash).\n\n```powershell\nscoop bucket add ziyifast https://github.com/ziyifast/gum\nscoop install gum\n```\n\n### From source\n\n```bash\ngit clone https://github.com/ziyifast/gum.git\ncd gum\nsudo make install     # System-wide (/usr/local/bin)\n# OR\nbash install.sh       # User-local (~/.gum/bin)\n```\n\nAfter installation, reload your shell:\n```bash\nsource ~/.zshrc  # or ~/.bashrc\n```\n\n## Quick Start\n\n### Setup\n\n```bash\ngum init          # Guided setup for work \u0026 home profiles\n# or\ngum create work   # Create profiles individually\ngum create home\n```\n\n### Use\n\n```bash\ngum use work              # Switch globally\ngum use home --local      # Switch for current repo only\ngum current               # Check active profile\ngum list                  # See all profiles\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `gum init` | Quick setup wizard (create work \u0026 home) |\n| `gum create \u003cname\u003e` | Create a new identity profile |\n| `gum list` | List all profiles (alias: `ls`) |\n| `gum use \u003cname\u003e` | Switch globally |\n| `gum use \u003cname\u003e --local` | Switch for current repo only |\n| `gum current` | Show active profile |\n| `gum show \u003cname\u003e` | Show profile details + public key |\n| `gum delete \u003cname\u003e` | Delete a profile (alias: `rm`) |\n| `gum import \u003cname\u003e` | Import current git config as profile |\n| `gum config [show\\|edit\\|reset]` | Manage gum settings |\n| `gum help` | Show help |\n\n## How It Works\n\n`gum use work` does all of this in one command:\n\n1. Sets `git config --global user.name` and `user.email`\n2. Updates the relevant SSH config block in `~/.ssh/config`\n3. Adds the SSH key to `ssh-agent`\n4. Records the active profile\n\nSSH config is managed with marker comments — your own entries are never modified:\n\n```ssh-config\n# Your config (untouched)\nHost myserver\n    HostName 10.0.1.1\n    User admin\n\n# \u003e\u003e\u003e gum managed: work \u003e\u003e\u003e\nHost git.woa.com\n    HostName git.woa.com\n    IdentityFile ~/.ssh/id_rsa\n    User git\n# \u003c\u003c\u003c gum managed: work \u003c\u003c\u003c\n```\n\n## Configuration\n\nCustomize defaults in `~/.gum/config`:\n\n```bash\ngum config edit\n```\n\n```bash\n# Default profile names for 'gum init'\nGUM_DEFAULT_PROFILES=(\"work\" \"home\")\n\n# Or customize for your workflow:\nGUM_DEFAULT_PROFILES=(\"company\" \"personal\" \"freelance\")\n```\n\n## Requirements\n\n- bash 4.0+ or zsh\n- git\n- ssh-keygen \u0026 ssh-agent\n\n## File Structure\n\n```\n~/.gum/\n├── bin/gum          # Executable\n├── config           # User settings\n├── profiles/        # Identity profiles\n│   ├── work.conf\n│   └── home.conf\n└── current          # Active profile name\n```\n\n## Documentation\n\n- [Architecture Guide](docs/architecture.md) — Code structure and design decisions\n- [Contributing](CONTRIBUTING.md) — How to contribute\n- [Changelog](CHANGELOG.md) — Version history\n\n## Contributing\n\nContributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziyifast%2Fgum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fziyifast%2Fgum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziyifast%2Fgum/lists"}