github-switcher


Namegithub-switcher JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryProfessional CLI tool for managing multiple GitHub identities with wizard-based profile creation and SSH key management
upload_time2025-09-06 11:30:44
maintainerNone
docs_urlNone
authorMostafa Gamil
requires_python>=3.10
licenseMIT
keywords github ssh git identity cli profile switcher
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # GitHub Switcher

[![Tests](https://github.com/mostafagamil/Github-Switcher/workflows/Tests/badge.svg)](https://github.com/mostafagamil/Github-Switcher/actions)
[![PyPI](https://img.shields.io/pypi/v/github-switcher.svg)](https://pypi.org/project/github-switcher/)
[![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://python.org)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

**Professional CLI for managing multiple GitHub identities with automated SSH key management and seamless profile switching**

## ✨ Key Features

- 🔐 **Automated SSH Key Management** - Generate, import, and manage SSH keys seamlessly
- ⚡ **Seamless Profile Switching** - Switch Git identities in seconds with intelligent matching
- 🎯 **Interactive Commands** - Smart wizards with case-insensitive profile matching
- 🔍 **SSH Detection** - Automatically detect and integrate existing GitHub SSH setup
- 🌐 **Cross-Platform** - Full support for macOS, Linux, and Windows
- 🏢 **Enterprise-Ready** - Secure, reliable, comprehensively tested

## 📦 Installation

### Recommended: UV (Modern & Fast)
```bash
uv tool install github-switcher
```
*UV provides faster installation, better dependency resolution, and isolated tool management*

### Standard: pip
```bash
pip install github-switcher
```

### macOS/Linux: Homebrew
```bash
brew tap mostafagamil/github-switcher
brew install github-switcher
```

## 🔧 System Requirements

- **Python 3.10+** - Modern Python runtime
- **Git** - Required for SSH operations and profile management
  - **macOS**: `xcode-select --install` or `brew install git`
  - **Windows**: [Git for Windows](https://git-scm.com/download/win) (includes Git Bash)
  - **Linux**: Usually pre-installed (`sudo apt install git` if needed)
- **SSH client** - For secure GitHub connectivity (included with Git)

## 🚀 Quick Start

```bash
# Verify installation
ghsw --version

# Create your first profile (interactive wizard)
ghsw create

# List all profiles
ghsw list

# Switch between profiles
ghsw switch work
ghsw switch personal

# Test SSH connection
ghsw test work
```

## 💻 Interactive Commands

All commands support interactive mode when no arguments are provided:

```bash
# Interactive profile creation - detects existing SSH keys
ghsw create

# Interactive switching - shows numbered profile list
ghsw switch
# 🔧 Select a profile to switch to:
#   1. work - john@company.com 🟢 Active
#   2. personal - john@gmail.com ⚪ Inactive
# 🎯 Enter profile number or name: 2

# Interactive profile management
ghsw delete          # Choose from list
ghsw copy-key        # Copy SSH public key to clipboard
ghsw test            # Test GitHub connection
ghsw regenerate-key  # Generate new SSH key
```

## 🔍 SSH Key Intelligence

GitHub Switcher automatically detects your existing SSH setup:

```bash
ghsw detect
# 🔍 Detecting existing GitHub setup...
# ✅ GitHub SSH connection is working
# 🔑 Found 2 SSH key(s):
#   ✅ id_ed25519_work (john@company.com) → used by 'work' profile
#   ✅ id_ed25519 (john@gmail.com)
# ⚙️ SSH config has 3 GitHub entries
```

**Smart SSH Strategy:**
- **Import Existing Keys** - Reuse and rename your SSH keys (prevents duplicates)
- **Generate New Keys** - Create fresh Ed25519 keys for clean separation
- **Duplicate Prevention** - Never shows already-imported keys
- **Profile Association** - Track which profile uses which SSH key

## 📋 Command Reference

| Command | Description |
|---------|-------------|
| `ghsw create [options]` | Create new profile with interactive wizard |
| `ghsw list` | Show all configured profiles with status |
| `ghsw switch [profile]` | Switch to profile (interactive if no argument) |
| `ghsw current` | Display currently active profile |
| `ghsw delete [profile]` | Remove profile and clean up SSH keys |
| `ghsw copy-key [profile]` | Copy SSH public key to clipboard |
| `ghsw test [profile]` | Test SSH connection to GitHub |
| `ghsw regenerate-key [profile]` | Generate new SSH key for profile |
| `ghsw detect` | Analyze existing GitHub SSH configuration |

## 🏢 Enterprise Features

- **Security Best Practices** - Ed25519 keys, proper file permissions, secure defaults
- **Comprehensive Testing** - 237 tests ensuring reliability across all platforms
- **Error Handling** - Robust error recovery and clear troubleshooting guidance
- **Cross-Platform** - Automated testing on macOS, Linux, and Windows
- **Type Safety** - Full type hints and static analysis validation
- **Professional Documentation** - Complete guides for installation, usage, and troubleshooting

## 📖 Documentation

- [Installation Guide](docs/installation.md) - Comprehensive setup instructions
- [Usage Guide](docs/usage.md) - Complete feature documentation
- [SSH Key Management](docs/existing-ssh-keys.md) - Working with existing SSH keys
- [API Reference](docs/api-reference.md) - Programmatic usage
- [Contributing](docs/contributing.md) - Development and contribution guidelines
- [Security Policy](SECURITY.md) - Vulnerability reporting and security practices

## 🤝 Support & Contributing

- **Issues & Bug Reports** - [GitHub Issues](https://github.com/mostafagamil/Github-Switcher/issues)
- **Feature Requests** - [GitHub Discussions](https://github.com/mostafagamil/Github-Switcher/discussions)
- **Contributing** - See [Contributing Guidelines](docs/contributing.md)
- **Security** - See [Security Policy](SECURITY.md)

## 💡 Example Workflows

### Development Teams
```bash
# Set up work and personal profiles
ghsw create --name work --fullname "John Doe" --email john@company.com
ghsw create --name personal --fullname "John Doe" --email john.personal@gmail.com

# Switch contexts quickly
ghsw switch work      # Work on company projects
ghsw switch personal  # Contribute to open source
```

### Freelancers
```bash
# Manage multiple clients
ghsw create --name client-a --email john@client-a.com
ghsw create --name client-b --email john@client-b.com
ghsw create --name personal --email john@personal.com

# Quick client switching
ghsw switch client-a  # Work on Client A projects
ghsw switch client-b  # Switch to Client B work
```

## 📊 Quality Metrics

- **Test Coverage** - Comprehensive test suite with 237 tests
- **Cross-Platform** - Automated CI testing on macOS, Linux, Windows
- **Type Safety** - Full mypy validation with strict settings
- **Code Quality** - Linted with ruff, formatted consistently
- **Security** - Ed25519 keys, proper permissions, input validation

## 🌟 Support the Project

If GitHub Switcher helps improve your workflow, consider supporting its development:

[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/mgamil)

Your support helps maintain and enhance GitHub Switcher with new features and improvements!

## 📄 License

MIT License - see [LICENSE](LICENSE) for details.

---

**Made with ❤️ for developers managing multiple GitHub identities**
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "github-switcher",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "github, ssh, git, identity, cli, profile, switcher",
    "author": "Mostafa Gamil",
    "author_email": "Mostafa Gamil <mostafa_gamil@yahoo.com>",
    "download_url": "https://files.pythonhosted.org/packages/dd/bd/77f94621e9393e5631b51283352a8d8eb89c211fb78c56759800bf1b0a22/github_switcher-0.1.0.tar.gz",
    "platform": null,
    "description": "# GitHub Switcher\n\n[![Tests](https://github.com/mostafagamil/Github-Switcher/workflows/Tests/badge.svg)](https://github.com/mostafagamil/Github-Switcher/actions)\n[![PyPI](https://img.shields.io/pypi/v/github-switcher.svg)](https://pypi.org/project/github-switcher/)\n[![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://python.org)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n**Professional CLI for managing multiple GitHub identities with automated SSH key management and seamless profile switching**\n\n## \u2728 Key Features\n\n- \ud83d\udd10 **Automated SSH Key Management** - Generate, import, and manage SSH keys seamlessly\n- \u26a1 **Seamless Profile Switching** - Switch Git identities in seconds with intelligent matching\n- \ud83c\udfaf **Interactive Commands** - Smart wizards with case-insensitive profile matching\n- \ud83d\udd0d **SSH Detection** - Automatically detect and integrate existing GitHub SSH setup\n- \ud83c\udf10 **Cross-Platform** - Full support for macOS, Linux, and Windows\n- \ud83c\udfe2 **Enterprise-Ready** - Secure, reliable, comprehensively tested\n\n## \ud83d\udce6 Installation\n\n### Recommended: UV (Modern & Fast)\n```bash\nuv tool install github-switcher\n```\n*UV provides faster installation, better dependency resolution, and isolated tool management*\n\n### Standard: pip\n```bash\npip install github-switcher\n```\n\n### macOS/Linux: Homebrew\n```bash\nbrew tap mostafagamil/github-switcher\nbrew install github-switcher\n```\n\n## \ud83d\udd27 System Requirements\n\n- **Python 3.10+** - Modern Python runtime\n- **Git** - Required for SSH operations and profile management\n  - **macOS**: `xcode-select --install` or `brew install git`\n  - **Windows**: [Git for Windows](https://git-scm.com/download/win) (includes Git Bash)\n  - **Linux**: Usually pre-installed (`sudo apt install git` if needed)\n- **SSH client** - For secure GitHub connectivity (included with Git)\n\n## \ud83d\ude80 Quick Start\n\n```bash\n# Verify installation\nghsw --version\n\n# Create your first profile (interactive wizard)\nghsw create\n\n# List all profiles\nghsw list\n\n# Switch between profiles\nghsw switch work\nghsw switch personal\n\n# Test SSH connection\nghsw test work\n```\n\n## \ud83d\udcbb Interactive Commands\n\nAll commands support interactive mode when no arguments are provided:\n\n```bash\n# Interactive profile creation - detects existing SSH keys\nghsw create\n\n# Interactive switching - shows numbered profile list\nghsw switch\n# \ud83d\udd27 Select a profile to switch to:\n#   1. work - john@company.com \ud83d\udfe2 Active\n#   2. personal - john@gmail.com \u26aa Inactive\n# \ud83c\udfaf Enter profile number or name: 2\n\n# Interactive profile management\nghsw delete          # Choose from list\nghsw copy-key        # Copy SSH public key to clipboard\nghsw test            # Test GitHub connection\nghsw regenerate-key  # Generate new SSH key\n```\n\n## \ud83d\udd0d SSH Key Intelligence\n\nGitHub Switcher automatically detects your existing SSH setup:\n\n```bash\nghsw detect\n# \ud83d\udd0d Detecting existing GitHub setup...\n# \u2705 GitHub SSH connection is working\n# \ud83d\udd11 Found 2 SSH key(s):\n#   \u2705 id_ed25519_work (john@company.com) \u2192 used by 'work' profile\n#   \u2705 id_ed25519 (john@gmail.com)\n# \u2699\ufe0f SSH config has 3 GitHub entries\n```\n\n**Smart SSH Strategy:**\n- **Import Existing Keys** - Reuse and rename your SSH keys (prevents duplicates)\n- **Generate New Keys** - Create fresh Ed25519 keys for clean separation\n- **Duplicate Prevention** - Never shows already-imported keys\n- **Profile Association** - Track which profile uses which SSH key\n\n## \ud83d\udccb Command Reference\n\n| Command | Description |\n|---------|-------------|\n| `ghsw create [options]` | Create new profile with interactive wizard |\n| `ghsw list` | Show all configured profiles with status |\n| `ghsw switch [profile]` | Switch to profile (interactive if no argument) |\n| `ghsw current` | Display currently active profile |\n| `ghsw delete [profile]` | Remove profile and clean up SSH keys |\n| `ghsw copy-key [profile]` | Copy SSH public key to clipboard |\n| `ghsw test [profile]` | Test SSH connection to GitHub |\n| `ghsw regenerate-key [profile]` | Generate new SSH key for profile |\n| `ghsw detect` | Analyze existing GitHub SSH configuration |\n\n## \ud83c\udfe2 Enterprise Features\n\n- **Security Best Practices** - Ed25519 keys, proper file permissions, secure defaults\n- **Comprehensive Testing** - 237 tests ensuring reliability across all platforms\n- **Error Handling** - Robust error recovery and clear troubleshooting guidance\n- **Cross-Platform** - Automated testing on macOS, Linux, and Windows\n- **Type Safety** - Full type hints and static analysis validation\n- **Professional Documentation** - Complete guides for installation, usage, and troubleshooting\n\n## \ud83d\udcd6 Documentation\n\n- [Installation Guide](docs/installation.md) - Comprehensive setup instructions\n- [Usage Guide](docs/usage.md) - Complete feature documentation\n- [SSH Key Management](docs/existing-ssh-keys.md) - Working with existing SSH keys\n- [API Reference](docs/api-reference.md) - Programmatic usage\n- [Contributing](docs/contributing.md) - Development and contribution guidelines\n- [Security Policy](SECURITY.md) - Vulnerability reporting and security practices\n\n## \ud83e\udd1d Support & Contributing\n\n- **Issues & Bug Reports** - [GitHub Issues](https://github.com/mostafagamil/Github-Switcher/issues)\n- **Feature Requests** - [GitHub Discussions](https://github.com/mostafagamil/Github-Switcher/discussions)\n- **Contributing** - See [Contributing Guidelines](docs/contributing.md)\n- **Security** - See [Security Policy](SECURITY.md)\n\n## \ud83d\udca1 Example Workflows\n\n### Development Teams\n```bash\n# Set up work and personal profiles\nghsw create --name work --fullname \"John Doe\" --email john@company.com\nghsw create --name personal --fullname \"John Doe\" --email john.personal@gmail.com\n\n# Switch contexts quickly\nghsw switch work      # Work on company projects\nghsw switch personal  # Contribute to open source\n```\n\n### Freelancers\n```bash\n# Manage multiple clients\nghsw create --name client-a --email john@client-a.com\nghsw create --name client-b --email john@client-b.com\nghsw create --name personal --email john@personal.com\n\n# Quick client switching\nghsw switch client-a  # Work on Client A projects\nghsw switch client-b  # Switch to Client B work\n```\n\n## \ud83d\udcca Quality Metrics\n\n- **Test Coverage** - Comprehensive test suite with 237 tests\n- **Cross-Platform** - Automated CI testing on macOS, Linux, Windows\n- **Type Safety** - Full mypy validation with strict settings\n- **Code Quality** - Linted with ruff, formatted consistently\n- **Security** - Ed25519 keys, proper permissions, input validation\n\n## \ud83c\udf1f Support the Project\n\nIf GitHub Switcher helps improve your workflow, consider supporting its development:\n\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/mgamil)\n\nYour support helps maintain and enhance GitHub Switcher with new features and improvements!\n\n## \ud83d\udcc4 License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n---\n\n**Made with \u2764\ufe0f for developers managing multiple GitHub identities**",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Professional CLI tool for managing multiple GitHub identities with wizard-based profile creation and SSH key management",
    "version": "0.1.0",
    "project_urls": {
        "Changelog": "https://github.com/mostafagamil/Github-Switcher/blob/main/CHANGELOG.md",
        "Homepage": "https://github.com/mostafagamil/Github-Switcher",
        "Issues": "https://github.com/mostafagamil/Github-Switcher/issues",
        "Repository": "https://github.com/mostafagamil/Github-Switcher"
    },
    "split_keywords": [
        "github",
        " ssh",
        " git",
        " identity",
        " cli",
        " profile",
        " switcher"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fd9fcb59f184698adccf580283486e4453ed2cf169b89e184c955889b3b33336",
                "md5": "dde4a67caf2a0edd820c5a1fd16d3ffe",
                "sha256": "f0720c168021116bdae5f55f35e3ac18645845f2cd6d11bdbf1bfd75ee4760ce"
            },
            "downloads": -1,
            "filename": "github_switcher-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "dde4a67caf2a0edd820c5a1fd16d3ffe",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 28950,
            "upload_time": "2025-09-06T11:30:43",
            "upload_time_iso_8601": "2025-09-06T11:30:43.326960Z",
            "url": "https://files.pythonhosted.org/packages/fd/9f/cb59f184698adccf580283486e4453ed2cf169b89e184c955889b3b33336/github_switcher-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ddbd77f94621e9393e5631b51283352a8d8eb89c211fb78c56759800bf1b0a22",
                "md5": "0084fa0b57042eb54dd13dd75a1bf300",
                "sha256": "aa17195aec9470e30f2f2666d0ad7ae685bebe710606a9af09404fa99f764cd6"
            },
            "downloads": -1,
            "filename": "github_switcher-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "0084fa0b57042eb54dd13dd75a1bf300",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 24300,
            "upload_time": "2025-09-06T11:30:44",
            "upload_time_iso_8601": "2025-09-06T11:30:44.816399Z",
            "url": "https://files.pythonhosted.org/packages/dd/bd/77f94621e9393e5631b51283352a8d8eb89c211fb78c56759800bf1b0a22/github_switcher-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-06 11:30:44",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "mostafagamil",
    "github_project": "Github-Switcher",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "github-switcher"
}
        
Elapsed time: 1.61674s