Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions extensions/git-id-switcher/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.14.0] - 2026-01-22

### Changed

- **Command Palette Display Names**: Unified command category prefix for consistency
- Changed from `Git ID:` to `Git ID Switcher:` for all commands
- `Git ID: Select Identity` → `Git ID Switcher: Select Identity`
- `Git ID: Show Current Identity` → `Git ID Switcher: Show Current Identity`
- Prevents potential conflicts with other Git ID extensions in the ecosystem

### Added

- **Documentation Command in README**: Added `Git ID Switcher: Show Documentation` to command lists
- Updated all 26 language README variants with the previously missing command
- Each language includes appropriately translated descriptions

### ⚠️ Breaking Change

- **Command Search**: Users who search for commands using `Git ID:` prefix will need to update their search to `Git ID Switcher:`
- **Keyboard Shortcuts**: Not affected (command IDs remain unchanged)
- **Settings**: Not affected (configuration keys remain unchanged)

## [0.13.8] - 2026-01-19

### Changed
Expand Down
99 changes: 50 additions & 49 deletions extensions/git-id-switcher/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@

While many Git identity switchers exist, **Git ID Switcher** solves the complex problems that others ignore:

1. **Submodules Nightmare**: Working with repositories that have submodules (e.g., Hugo themes, vendored libraries) usually requires setting `git config user.name` manually for *each* submodule. This extension handles it elegantly by recursively applying your identity to all active submodules.
1. **Submodules Nightmare**: Working with repositories that have submodules (e.g., Hugo themes, vendored libraries) usually requires setting `git config user.name` manually for _each_ submodule. This extension handles it elegantly by recursively applying your identity to all active submodules.
2. **SSH & GPG handling**: It doesn't just change your name; it swaps your SSH keys in the agent and configures GPG signing so you never commit with the wrong signature.

## Features
Expand Down Expand Up @@ -294,17 +294,17 @@ Note: The last identity (`freelance`) has no SSH - it only switches Git config.

### Identity Properties

| Property | Required | Description |
| ------------- | -------- | ---------------------------------------------------------- |
| `id` | ✅ | Unique identifier (e.g., `"work"`, `"personal"`) |
| `name` | ✅ | Git user.name - shown in commits |
| `email` | ✅ | Git user.email - shown in commits |
| `icon` | | Emoji shown in status bar (e.g., `"🏠"`). Single emoji only |
| Property | Required | Description |
| ------------- | -------- | ---------------------------------------------------------------- |
| `id` | ✅ | Unique identifier (e.g., `"work"`, `"personal"`) |
| `name` | ✅ | Git user.name - shown in commits |
| `email` | ✅ | Git user.email - shown in commits |
| `icon` | | Emoji shown in status bar (e.g., `"🏠"`). Single emoji only |
| `service` | | Service name (e.g., `"GitHub"`, `"GitLab"`). Used for UI display |
| `description` | | Short description shown in picker and tooltip |
| `sshKeyPath` | | Path to SSH private key (e.g., `"~/.ssh/id_ed25519_work"`) |
| `sshHost` | | SSH config Host alias (e.g., `"github-work"`) |
| `gpgKeyId` | | GPG key ID for commit signing |
| `description` | | Short description shown in picker and tooltip |
| `sshKeyPath` | | Path to SSH private key (e.g., `"~/.ssh/id_ed25519_work"`) |
| `sshHost` | | SSH config Host alias (e.g., `"github-work"`) |
| `gpgKeyId` | | GPG key ID for commit signing |

#### Display Limitations

Expand All @@ -313,38 +313,38 @@ Note: The last identity (`freelance`) has no SSH - it only switches Git config.

### Global Settings

| Setting | Default | Description |
| ------- | ------- | ----------- |
| `gitIdSwitcher.identities` | See sample | List of identity configurations |
| `gitIdSwitcher.defaultIdentity` | See sample | ID of default identity to use |
| `gitIdSwitcher.autoSwitchSshKey` | `true` | Auto-switch SSH key when changing identities |
| `gitIdSwitcher.showNotifications` | `true` | Show notification on identity switch |
| `gitIdSwitcher.applyToSubmodules` | `true` | Propagate identity to Git submodules |
| `gitIdSwitcher.submoduleDepth` | `1` | Max depth for nested submodule config (1-5) |
| `gitIdSwitcher.includeIconInGitConfig` | `false` | Include icon emoji in Git config `user.name` |
| `gitIdSwitcher.logging.fileEnabled` | `false` | Enable audit logging (identity switches, SSH operations) |
| `gitIdSwitcher.logging.filePath` | `""` | Log file path (e.g., `~/.git-id-switcher/security.log`). Empty = default location |
| `gitIdSwitcher.logging.maxFileSize` | `10485760` | Max file size before rotation (bytes, 1MB-100MB) |
| `gitIdSwitcher.logging.maxFiles` | `5` | Max rotated log files to keep (1-20) |
| `gitIdSwitcher.logging.level` | `"INFO"` | Log level: `DEBUG`/`INFO`/`WARN`/`ERROR`/`SECURITY`. Records selected level and above |
| `gitIdSwitcher.logging.redactAllSensitive` | `false` | When enabled, all values are masked in logs (maximum privacy mode) |
| `gitIdSwitcher.commandTimeouts` | `{}` | Custom timeout per command (ms, 1sec-5min). E.g., `{"git": 15000, "ssh-add": 10000}` |
| Setting | Default | Description |
| ------------------------------------------ | ---------- | ------------------------------------------------------------------------------------- |
| `gitIdSwitcher.identities` | See sample | List of identity configurations |
| `gitIdSwitcher.defaultIdentity` | See sample | ID of default identity to use |
| `gitIdSwitcher.autoSwitchSshKey` | `true` | Auto-switch SSH key when changing identities |
| `gitIdSwitcher.showNotifications` | `true` | Show notification on identity switch |
| `gitIdSwitcher.applyToSubmodules` | `true` | Propagate identity to Git submodules |
| `gitIdSwitcher.submoduleDepth` | `1` | Max depth for nested submodule config (1-5) |
| `gitIdSwitcher.includeIconInGitConfig` | `false` | Include icon emoji in Git config `user.name` |
| `gitIdSwitcher.logging.fileEnabled` | `false` | Enable audit logging (identity switches, SSH operations) |
| `gitIdSwitcher.logging.filePath` | `""` | Log file path (e.g., `~/.git-id-switcher/security.log`). Empty = default location |
| `gitIdSwitcher.logging.maxFileSize` | `10485760` | Max file size before rotation (bytes, 1MB-100MB) |
| `gitIdSwitcher.logging.maxFiles` | `5` | Max rotated log files to keep (1-20) |
| `gitIdSwitcher.logging.level` | `"INFO"` | Log level: `DEBUG`/`INFO`/`WARN`/`ERROR`/`SECURITY`. Records selected level and above |
| `gitIdSwitcher.logging.redactAllSensitive` | `false` | When enabled, all values are masked in logs (maximum privacy mode) |
| `gitIdSwitcher.commandTimeouts` | `{}` | Custom timeout per command (ms, 1sec-5min). E.g., `{"git": 15000, "ssh-add": 10000}` |

#### About `includeIconInGitConfig`

Controls behavior when `icon` field is set:

| Value | Behavior |
|-------|----------|
| Value | Behavior |
| ----------------- | ----------------------------------------------------------------------- |
| `false` (default) | `icon` is shown in editor UI only. Only `name` is written to Git config |
| `true` | `icon + name` is written to Git config. Emoji appears in commit history |
| `true` | `icon + name` is written to Git config. Emoji appears in commit history |

Example: `icon: "👤"`, `name: "Alex Smith"`

| includeIconInGitConfig | Git config `user.name` | Commit signature |
|------------------------|------------------------|------------------|
| `false` | `Alex Smith` | `Alex Smith <email>` |
| `true` | `👤 Alex Smith` | `👤 Alex Smith <email>` |
| includeIconInGitConfig | Git config `user.name` | Commit signature |
| ---------------------- | ---------------------- | ----------------------- |
| `false` | `Alex Smith` | `Alex Smith <email>` |
| `true` | `👤 Alex Smith` | `👤 Alex Smith <email>` |

### Note: Basic Setup (No SSH)

Expand Down Expand Up @@ -415,24 +415,24 @@ That's why this extension provides submodule propagation (see "Advanced: Submodu

Git ID Switcher manages SSH keys through `ssh-agent`:

| Operation | Command |
| ---------- | ------------------------- |
| Add key | `ssh-add <keyPath>` |
| Remove key | `ssh-add -d <keyPath>` |
| List keys | `ssh-add -l` |
| Operation | Command |
| ---------- | ---------------------- |
| Add key | `ssh-add <keyPath>` |
| Remove key | `ssh-add -d <keyPath>` |
| List keys | `ssh-add -l` |

**Important:** This extension does **NOT** modify `~/.ssh/config`. You need to set up your SSH config manually (see Step 2 in "Quick Start").

### Interaction with Existing SSH Config

If you already have SSH configuration, Git ID Switcher works alongside it:

| Your Setup | Git ID Switcher Behavior |
| ---------------------------------------- | --------------------------------------------------------------- |
| `~/.ssh/config` with `IdentityFile` | Both can be used; use `IdentitiesOnly yes` to prevent conflicts |
| `GIT_SSH_COMMAND` environment variable | Git uses your custom SSH command; ssh-agent still works |
| `git config core.sshCommand` | Same as above |
| direnv with SSH-related env vars | Works alongside; ssh-agent operates independently |
| Your Setup | Git ID Switcher Behavior |
| -------------------------------------- | --------------------------------------------------------------- |
| `~/.ssh/config` with `IdentityFile` | Both can be used; use `IdentitiesOnly yes` to prevent conflicts |
| `GIT_SSH_COMMAND` environment variable | Git uses your custom SSH command; ssh-agent still works |
| `git config core.sshCommand` | Same as above |
| direnv with SSH-related env vars | Works alongside; ssh-agent operates independently |

**Recommended:** Always use `IdentitiesOnly yes` in your SSH config. This prevents SSH from trying multiple keys.

Expand Down Expand Up @@ -583,10 +583,11 @@ If you previously saved empty settings, they may have synced to the cloud and ar

## Commands

| Command | Description |
| ------------------------------- | ----------------------------- |
| `Git ID: Select Identity` | Open the identity picker |
| `Git ID: Show Current Identity` | Display current identity info |
| Command | Description |
| ---------------------------------------- | ----------------------------- |
| `Git ID Switcher: Select Identity` | Open the identity picker |
| `Git ID Switcher: Show Current Identity` | Display current identity info |
| `Git ID Switcher: Show Documentation` | Show documentation |

---

Expand Down
Loading
Loading