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.)
|
|
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.
|
๐ฏ 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:
- submodule ike: submodule li lon repo sina la (e.g., Hugo theme, vendor library), sina wile pana e
git config user.nametawa submodule ale. ilo ni li pana e nimi tawa submodule ale. - 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.
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
gpgKeyIdli 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.
command palette la, Git ID Switcher: Delete Identity li ken weka e nimi.
ilo (Commands)
| ilo | sona |
|---|---|
Git ID Switcher: Select Identity | o kama jo e nimi |
Git ID Switcher: Delete Identity | o weka e nimi |
Git ID Switcher: Show Current Identity | o lukin e nimi sina |
Git ID Switcher: Show Documentation | o lukin e lipu sona |
sona settings (Configuration Reference)
nimi ijo (Identity Properties)
| ijo | wile | sona |
|---|---|---|
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 |
icon | sitelen lon status bar (example: "โ๏ธ"). sitelen wan taso | |
service | nimi ilo (example: "GitHub", "GitLab"). tawa UI | |
description | sona lili tawa picker en tooltip | |
sshKeyPath | nasin tawa SSH key len (example: "~/.ssh/id_ed25519_work") | |
sshHost | SSH config host nimi (example: "github-work") | |
gpgKeyId | GPG 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)
| settings | open | sona |
|---|---|---|
gitIdSwitcher.identities | lukin e ni | nimi ale |
gitIdSwitcher.defaultIdentity | lukin e ni | nimi open |
gitIdSwitcher.autoSwitchSshKey | true | SSH key li ante |
gitIdSwitcher.showNotifications | true | toki li kama |
gitIdSwitcher.applyToSubmodules | true | submodule li kama jo e nimi |
gitIdSwitcher.submoduleDepth | 1 | submodule suli (1-5) |
gitIdSwitcher.includeIconInGitConfig | false | sitelen li tawa Git config user.name |
gitIdSwitcher.syncCheck.enabled | true | nimi en git config li sama ala li sama |
gitIdSwitcher.syncCheck.onFocusReturn | true | window li kama la, sync check li open |
gitIdSwitcher.logging.fileEnabled | false | file logging li open (tawa lukin) |
gitIdSwitcher.logging.filePath | "" | nasin file log |
gitIdSwitcher.logging.maxFileSize | 10485760 | file log suli (bytes, 1MB-100MB) |
gitIdSwitcher.logging.maxFiles | 5 | file log nanpa (1-20) |
gitIdSwitcher.logging.level | "INFO" | logging suli (DEBUG/INFO/WARN/ERROR/SECURITY) |
gitIdSwitcher.logging.redactAllSensitive | false | ni 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:
| ijo | pali |
|---|---|
false (open) | icon li lon UI taso. name taso li tawa Git config |
true | icon + name li tawa Git config. sitelen li lon commit |
example: icon: "๐ค", name: "jan Mun"
| includeIconInGitConfig | Git config user.name | commit sitelen |
|---|---|---|
false | jan Mun | jan 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/configfile - 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):
- Git Config (lon):
git config --local user.nameenuser.emailli ante - SSH Key (
sshKeyPathli lon): ssh-agent li kama jo e key ni, weka e key ante - GPG Key (
gpgKeyIdli lon):git config --local user.signingkeyli ante, sitelen li open - Submodule (open): submodule ale li kama jo e settings (open: linja wan)
- 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:
| pali | ilo |
|---|---|
| key o pana | ssh-add <keyPath> |
| key o weka | ssh-add -d <keyPath> |
| key o lukin | ssh-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 settings | Git ID Switcher pali |
|---|---|
~/.ssh/config IdentityFile li lon | tu li ken; IdentitiesOnly yes li pona tawa ike ala |
GIT_SSH_COMMAND li lon | SSH ilo sina li lon; ssh-agent li pali |
git config core.sshCommand li lon | sama sewi |
| direnv SSH li lon | pona; 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:
- ssh-agent key (Git ID Switcher li pana)
~/.ssh/configkey- 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/pinisubmoduleDepth: 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?
-
ssh-agentli pali:eval "$(ssh-agent -s)" -
key nasin li pona:
ls -la ~/.ssh/id_ed25519_* -
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:
-
remote URL li kepeken host nimi pona:
git remote -v # jan lawa repo la git@github-work:... li lon -
o ante:
git remote set-url origin git@github-work:lawa/repo.git
GPG sitelen li pali ala?
-
GPG key ID:
gpg --list-secret-keys --keyid-format SHORT -
sitelen test:
echo "test" | gpg --clearsign -
nimi email en GPG key email li sama.
nimi li lon ala?
- sina lon Git repo
settings.jsonli 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:
- o alasa e settings lon settings
- sitelen gear โ "Reset Setting"
- 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).
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!)