Git ID Switcher โœจ

May 8, 2026 ยท View on GitHub

toki pona li toki lili. ona li jo e nimi 120 taso.

(Toki Pona is a minimalist language. It has only about 120 words.)


Git ID Switcher luka wan la, sina ante e nimi mute lon Git. GitHub account mute, SSH key, GPG sitelen li pona. Git Submodule li kama jo e nimi.

Open VSX Registry License: MIT OpenSSF Scorecard OpenSSF Best Practices SLSA 3 Sigstore SBOM Security CI Platform codecov Quality Gate Status Snyk monitored Gitleaks Harden-Runner Karesansui Architecture
26 Languages ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡ฏ๐Ÿ‡ต ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‡น๐Ÿ‡ผ ๐Ÿ‡ฐ๐Ÿ‡ท ๐Ÿ‡ฉ๐Ÿ‡ช ๐Ÿ‡ซ๐Ÿ‡ท ๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ‡ง๐Ÿ‡ท ๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ‡ท๐Ÿ‡บ ๐Ÿ‡ต๐Ÿ‡ฑ ๐Ÿ‡น๐Ÿ‡ท ๐Ÿ‡จ๐Ÿ‡ฟ ๐Ÿ‡ญ๐Ÿ‡บ ๐Ÿ‡ง๐Ÿ‡ฌ ๐Ÿ‡บ๐Ÿ‡ฆ ๐ŸŒ ๐ŸŒบ ๐Ÿป ๐Ÿ‰ โœจ ๐Ÿ–– ๐Ÿฑ ๐Ÿดโ€โ˜ ๏ธ ๐ŸŽญ

Demo

๐ŸŽฏ tan seme la ilo Git ID Switcher?

ilo ante mute li lon. taso Git ID Switcher li pona tan ni: ona li weka e ike suli:

  1. submodule ike: submodule li lon repo sina la (e.g., Hugo theme, vendor library), sina wile pana e git config user.name tawa submodule ale. ilo ni li pana e nimi tawa submodule ale.
  2. SSH en GPG: ilo ni li ante e nimi taso ala. ona li ante e SSH key lon ssh-agent, li pana e GPG sitelen. ni la, sina sitelen ike ala lon commit.

ijo pona (Features)

  • nimi ante UI: settings.json ante ala la, nimi sin, ante, weka, nanpa ante li ken
  • luka wan la nimi ante: Git user.name en user.email li ante lon tenpo lili
  • status bar: nimi sina li lon status bar lon tenpo ale
  • Sync Check: nimi en git config li sama ala la, status bar li toki e ike
  • submodule pona: Git submodule li kama jo e nimi
  • SSH key: ssh-agent SSH key li ante
  • GPG sitelen: GPG key li pona tawa commit sitelen (wile ala)
  • sona mute tooltip: description en SSH host li lon
  • ma ale: macOS, Linux, Windows
  • toki mute: toki 17

๐ŸŒ toki lili

mi olin e kulupu lili. mi wile ala weka e ona tan ni: ona li lili. toki mi li pona ala la, mi wile e ni: sina sona e wile mi. mi wile pana e sona mi: toki lili li lon, mi pilin pona tawa ona.

ilo ni li jo e toki 17 pi VS Code. lipu README la, mi mute li lukin pali e toki pi kulupu lili en toki musi.

ni li "ilo pi toki ale" taso alaโ€”ni li "pilin pona tawa toki ale." toki ale la, ma ale la, jan pali li pana e commit pona tawa ma... mi wile e ni: ilo ni li nasin pona tawa ni.


open (Quick Start)

ni li nasin pona tawa jan pona account en jan lawa account (Enterprise Managed User).

nanpa wan: SSH key

o pali e SSH key (sina jo la o ante ala):

# jan pona
ssh-keygen -t ed25519 -C "mun@personal.example.com" -f ~/.ssh/id_ed25519_personal

# jan lawa
ssh-keygen -t ed25519 -C "mun@techcorp.example.com" -f ~/.ssh/id_ed25519_work

SSH key key open (.pub file) o pana tawa GitHub account.

sona: GitHub li kama jo e id_ed25519_personal.pub (key open). id_ed25519_personal (ala .pub) li key lenโ€”o pana ala tawa jan ante!

nanpa tu: SSH config

~/.ssh/config o ante:

# jan pona GitHub account (open)
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    IdentitiesOnly yes

# jan lawa GitHub account
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

nanpa tu wan: ilo ni

ilo o open la, nimi lukin li lon. o ante e ona tawa sina.

open nasin (nanpa 13): status bar la nimi ante UI o open, o ante, o pali sin

key file li tawa ala: SSH key la, key nasin (ma) taso li lon. key insa li tawa ala ma ante!

GPG sitelen la: nimi ante UI la gpgKeyId li ken lon. GPG key ID nasin "ike en pona" o lukin.

sona: settings.json la, sina ken ante. settings o open (Cmd+, / Ctrl+,) โ†’ "Git ID Switcher" o alasa โ†’ "Edit in settings.json" o luka. JSON nasin "sona ale: 5 account SSH + GPG" o lukin.


sona ale: 5 account SSH + GPG

ale li lon ni:

SSH Config (~/.ssh/config)

# jan pona account (open)
Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    IdentitiesOnly yes

# jan lawa account (Enterprise Managed User)
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

# kulupu mani A (Bitbucket)
Host bitbucket-clienta
    HostName bitbucket.org
    User git
    IdentityFile ~/.ssh/id_ed25519_clienta
    IdentitiesOnly yes

# kulupu mani B (Bitbucket)
Host bitbucket-clientb
    HostName bitbucket.org
    User git
    IdentityFile ~/.ssh/id_ed25519_clientb
    IdentitiesOnly yes

# pali open (GitLab)
Host gitlab-oss
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_ed25519_oss
    IdentitiesOnly yes

ilo settings

{
  "gitIdSwitcher.identities": [
    {
      "id": "personal",
      "name": "jan Mun",
      "email": "mun@personal.example.com",
      "service": "GitHub",
      "icon": "โ˜€๏ธ",
      "description": "pali mi",
      "sshKeyPath": "~/.ssh/id_ed25519_personal",
      "sshHost": "github-personal",
      "gpgKeyId": "ABCD1234EF567890"
    },
    {
      "id": "work-main",
      "name": "jan Mun",
      "email": "mun@techcorp.example.com",
      "service": "GitHub pali",
      "icon": "๐ŸŒ™",
      "description": "TechCorp pali suli",
      "sshKeyPath": "~/.ssh/id_ed25519_work",
      "sshHost": "github-work",
      "gpgKeyId": "9876543210FEDCBA"
    },
    {
      "id": "client-a",
      "name": "jan Mun",
      "email": "mun@clienta.example.com",
      "service": "Bitbucket",
      "icon": "๐Ÿ’ง",
      "description": "ClientA pali",
      "sshKeyPath": "~/.ssh/id_ed25519_clienta",
      "sshHost": "bitbucket-clienta"
    },
    {
      "id": "client-b",
      "name": "M.Mun",
      "email": "m.mun@clientb.example.com",
      "service": "Bitbucket",
      "icon": "๐Ÿ”ฅ",
      "description": "ClientB lon ma",
      "sshKeyPath": "~/.ssh/id_ed25519_clientb",
      "sshHost": "bitbucket-clientb"
    },
    {
      "id": "oss",
      "name": "mun-dev",
      "email": "mun.dev@example.com",
      "service": "GitLab",
      "icon": "๐ŸŒฟ",
      "description": "pana tawa OSS",
      "sshKeyPath": "~/.ssh/id_ed25519_oss",
      "sshHost": "gitlab-oss"
    }
  ],
  "gitIdSwitcher.defaultIdentity": "personal",
  "gitIdSwitcher.autoSwitchSshKey": true,
  "gitIdSwitcher.applyToSubmodules": true
}

sona: nimi nanpa 4 (client-b) li nimi lili. nimi nanpa 5 (oss) li nimi pali. jan sama la, nimi ante li ken lon nimi ante ale.


nimi ante (Profile Management)

status bar o luka โ†’ nanpa pini "nimi ante" o luka โ†’ UI o open. nimi sin, ante, weka, nanpa anteโ€”ale li ken lon UI.

nimi ante: weka en nanpa ante nasin

command palette la, Git ID Switcher: Delete Identity li ken weka e nimi.


ilo (Commands)

ilosona
Git ID Switcher: Select Identityo kama jo e nimi
Git ID Switcher: Delete Identityo weka e nimi
Git ID Switcher: Show Current Identityo lukin e nimi sina
Git ID Switcher: Show Documentationo lukin e lipu sona

sona settings (Configuration Reference)

nimi ijo (Identity Properties)

ijowilesona
idโœ…nimi ante (example: "personal", "work-main")
nameโœ…Git user.name โ€” commit li jo e ni
emailโœ…Git user.email โ€” commit li jo e ni
iconsitelen lon status bar (example: "โ˜€๏ธ"). sitelen wan taso
servicenimi ilo (example: "GitHub", "GitLab"). tawa UI
descriptionsona lili tawa picker en tooltip
sshKeyPathnasin tawa SSH key len (example: "~/.ssh/id_ed25519_work")
sshHostSSH config host nimi (example: "github-work")
gpgKeyIdGPG key ID tawa commit sitelen

lukin poka (Display Limitations)

  • status bar: ~25 sitelen li ante tawa ...
  • icon: sitelen wan taso (grapheme cluster). sitelen mute li ken ala

settings ale (General Settings)

settingsopensona
gitIdSwitcher.identitieslukin e ninimi ale
gitIdSwitcher.defaultIdentitylukin e ninimi open
gitIdSwitcher.autoSwitchSshKeytrueSSH key li ante
gitIdSwitcher.showNotificationstruetoki li kama
gitIdSwitcher.applyToSubmodulestruesubmodule li kama jo e nimi
gitIdSwitcher.submoduleDepth1submodule suli (1-5)
gitIdSwitcher.includeIconInGitConfigfalsesitelen li tawa Git config user.name
gitIdSwitcher.syncCheck.enabledtruenimi en git config li sama ala li sama
gitIdSwitcher.syncCheck.onFocusReturntruewindow li kama la, sync check li open
gitIdSwitcher.logging.fileEnabledfalsefile logging li open (tawa lukin)
gitIdSwitcher.logging.filePath""nasin file log
gitIdSwitcher.logging.maxFileSize10485760file log suli (bytes, 1MB-100MB)
gitIdSwitcher.logging.maxFiles5file log nanpa (1-20)
gitIdSwitcher.logging.level"INFO"logging suli (DEBUG/INFO/WARN/ERROR/SECURITY)
gitIdSwitcher.logging.redactAllSensitivefalseni li lon la, ale li len lon lipu (tenpo pona suli)
gitIdSwitcher.commandTimeouts{}ilo weka tenpo (ms, 1s-5min)

sona includeIconInGitConfig

icon li lon la, pali ni:

ijopali
false (open)icon li lon UI taso. name taso li tawa Git config
trueicon + name li tawa Git config. sitelen li lon commit

example: icon: "๐Ÿ‘ค", name: "jan Mun"

includeIconInGitConfigGit config user.namecommit sitelen
falsejan Munjan Mun <email>
true๐Ÿ‘ค jan Mun๐Ÿ‘ค jan Mun <email>

nasin pali (How It Works)

Git Config linja (Git Config Layer Structure)

Git config li jo e linja tu wan; anpa li ante e sewi:

System (/etc/gitconfig)
    โ†“ ante
Global (~/.gitconfig)
    โ†“ ante
Local (.git/config)  โ† suli

Git ID Switcher li sitelen lon --local (repo local).

ni li tan:

  • nimi li lon repo ale .git/config file
  • repo ale li ken jo e nimi ante
  • global settings (~/.gitconfig) li ante ala

nimi ante pali (Identity Switching Behavior)

nimi ante la, ilo li pali (nanpa):

  1. Git Config (lon): git config --local user.name en user.email li ante
  2. SSH Key (sshKeyPath li lon): ssh-agent li kama jo e key ni, weka e key ante
  3. GPG Key (gpgKeyId li lon): git config --local user.signingkey li ante, sitelen li open
  4. Submodule (open): submodule ale li kama jo e settings (open: linja wan)
  5. Sync Check: nimi pana li sama git config ala li sama

Sync Check

nimi sina en git config --local ijo (user.name, user.email, user.signingkey) li sama ala la, status bar li toki e ike.

tenpo seme la lukin li open:

  • nimi pana la
  • ma pali ante la
  • settings ante la
  • window li kama la (tenpo lili 500ms)

sama ala li lon la:

  • status bar li jo e โš ๏ธ sitelen en kule ike
  • tooltip li jo e table: ijo seme, ijo wile, ijo lon
  • status bar o luka la, nasin pona li lon:
    • nimi o pana sin โ€” nimi sina li tawa git config sin
    • nimi ante o kama jo โ€” nimi picker o open
    • o weka โ€” ike toki li weka tawa tenpo lukin sin

o pini:

gitIdSwitcher.syncCheck.enabled li false la, sync check ale li pini. window kama taso li pini la, gitIdSwitcher.syncCheck.onFocusReturn li false.

submodule pana (Submodule Propagation Mechanism)

local config li lon repo taso. submodule li kama jo ala. ni la ilo ni li pana e nimi tawa submodule (o lukin e "suli: Submodule").

SSH key sona (SSH Key Management Details)

Git ID Switcher li kepeken ssh-agent tawa SSH key:

paliilo
key o panassh-add <keyPath>
key o wekassh-add -d <keyPath>
key o lukinssh-add -l

suli: ilo ni li ante ala e ~/.ssh/config. SSH config o ante lon luka sina ("open" nanpa tu o lukin).

SSH settings li lon la (Existing SSH Configuration Interaction)

SSH settings li lon la, Git ID Switcher li pali ni:

sina settingsGit ID Switcher pali
~/.ssh/config IdentityFile li lontu li ken; IdentitiesOnly yes li pona tawa ike ala
GIT_SSH_COMMAND li lonSSH ilo sina li lon; ssh-agent li pali
git config core.sshCommand li lonsama sewi
direnv SSH li lonpona; ssh-agent li pali

pona: SSH config la, IdentitiesOnly yes o lon. SSH li kepeken key mute ala.

tan seme IdentitiesOnly yes?

ni ala la, SSH li alasa e key ni:

  1. ssh-agent key (Git ID Switcher li pana)
  2. ~/.ssh/config key
  3. key open (~/.ssh/id_rsa, ~/.ssh/id_ed25519, etc.)

ni la, key ike li ken kama.

IdentitiesOnly yes la, SSH li kepeken key ni taso. Git ID Switcher key li pona.

# nasin pona
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes  # โ† ni li suli

ni la, github-work host li kepeken ~/.ssh/id_ed25519_work taso. key ante li lon ala.


suli: Submodule (Advanced: Submodule Support)

repo suli li jo e Git submodule la, nimi ante li ike. sina commit lon submodule la, Git li kepeken submodule local config; li lon ala la, global config li kama (email ike!).

Git ID Switcher li alasa e submodule, li pana e nimi.

{
  "gitIdSwitcher.applyToSubmodules": true,
  "gitIdSwitcher.submoduleDepth": 1
}
  • applyToSubmodules: ni li open/pini
  • submoduleDepth: suli?
    • 1: submodule open taso (mute)
    • 2+: submodule lon submodule

ni la repo suli commit anu vendor repo commitโ€”nimi sina li pona.


ike en pona (Troubleshooting)

SSH key li ante ala?

  1. ssh-agent li pali:

    eval "$(ssh-agent -s)"
    
  2. key nasin li pona:

    ls -la ~/.ssh/id_ed25519_*
    
  3. macOS la, Keychain li kama jo:

    ssh-add --apple-use-keychain ~/.ssh/id_ed25519_work
    

push la, nimi ike?

repo sin clone:

jan lawa repo o clone la, SSH config host nimi o kepeken:

# jan lawa (github-work nimi o kepeken)
git clone git@github-work:lawa/repo.git

# jan pona (github.com open o kepeken)
git clone git@github.com:mun/repo.git

repo ni li lon la:

  1. remote URL li kepeken host nimi pona:

    git remote -v
    # jan lawa repo la git@github-work:... li lon
    
  2. o ante:

    git remote set-url origin git@github-work:lawa/repo.git
    

GPG sitelen li pali ala?

  1. GPG key ID:

    gpg --list-secret-keys --keyid-format SHORT
    
  2. sitelen test:

    echo "test" | gpg --clearsign
    
  3. nimi email en GPG key email li sama.

nimi li lon ala?

  • sina lon Git repo
  • settings.json li jo ala e ike syntax
  • VS Code window reload (Cmd+Shift+P โ†’ "Reload Window")

name ijo li ike?

name ijo li jo e sitelen ni la, ike li kama:

` $ ( ) { } | & < >

sina wile e nimi ilo la, o kepeken service ijo.

// IKE
"name": "jan Mun (pona)"

// PONA
"name": "jan Mun",
"service": "GitHub"

settings sin li lon ala?

ilo ante la, settings sin li lon ala lon settings.

pona: o open sin e ilo ale.

VS Code li jo e settings schema lon memory. "Reload Window" anu reinstall li ken ala.

open ijo (identities etc.) li lon ala?

install sin la, example settings li lon ala la, Settings Sync li ken tan.

tenpo pini la, settings ala li lon la, cloud sync li ante e open ijo.

pona:

  1. o alasa e settings lon settings
  2. sitelen gear โ†’ "Reset Setting"
  3. Settings Sync (settings pini li weka lon cloud)

nasin sona (Design Philosophy)

"mi seme?" โ€” wile ni taso li jo e toki.

nasin Karesansui li lon: insa pi lili en pona (linja 100), pona wawa (90% li lon, lipu, tenpo awen) li lon poka, wile ala li lon (GitHub API ala, ilo token ala).

Karesansui Architecture

o lukin e nasin sona ale


pana (Contributing)

sina ken pana! o lukin e CONTRIBUTING.md.

lawa (License)

MIT License - o lukin e LICENSE.

jan pali (Credits)

Null;Variant li pali e ni.


โœจ pona tawa sina! โœจ

(Good to you! / Take care!)