Git ID Switcher 🌍
May 8, 2026 · View on GitHub
Esperanto estas internacia lingvo kreita en 1887 de L. L. Zamenhof. Ĝia celo estas faciligi komunikadon inter homoj de diversaj landoj.
|
|
Ŝanĝu inter pluraj Git-profiloj per unu klako. Administru plurajn GitHub-kontojn, SSH-ŝlosilojn, GPG-subskribon, kaj aŭtomate apliku profilon al Git-submoduloj.
|
🎯 Kial Git ID Switcher?
Kvankam multaj Git-profilo-ŝanĝiloj ekzistas, Git ID Switcher solvas kompleksajn problemojn kiujn aliaj ignoras:
- Submodula Koŝmaro: Laborante kun deponejoj havantaj submodulojn (ekz: Hugo-temoj, vendoraj bibliotekoj), oni kutime devas mane agordi
git config user.namepor ĉiu submodulo. Ĉi tiu etendo traktas ĝin elegante, rekursie aplikante vian profilon al ĉiuj aktivaj submoduloj. - SSH & GPG Traktado: Ĝi ne nur ŝanĝas vian nomon; ĝi interŝanĝas viajn SSH-ŝlosilojn en la ssh-agent kaj agordas GPG-subskribon, por ke vi neniam faru commit kun malĝusta subskribo.
Funkcioj
- Profila Administra UI: Aldonu, redaktu, forigu kaj reordigu profilojn sen redakti settings.json
- Unu-klaka Profilo-Ŝanĝo: Ŝanĝu vian Git user.name kaj user.email tuj
- Statusbreto-Integriĝo: Ĉiam vidu vian nunan profilon per unu rigardo
- Sync Check: Realtempa detekto de malkongruoj inter profilo kaj git-agordo, kun statusa averto
- Submodula Subteno: Aŭtomate disvastigu vian profilon al Git-submoduloj
- SSH-Ŝlosila Administrado: Aŭtomate ŝanĝu SSH-ŝlosilojn en ssh-agent
- GPG-Subskriba Subteno: Agordu vian GPG-ŝlosilon por commit-subskribo (laŭvola)
- Riĉaj Konsiletoj: Detalaj profilo-informoj kun priskribo kaj SSH-gastigo
- Plurplatforma: Funkcias sur macOS, Linux, kaj Windows
- Lokalizita: Subtenas 17 lingvojn
🌏 Noto pri Plurlingva Subteno
Mi valoras la ekziston de minoritatoj. Mi ne volas forĵeti ilin nur ĉar ili estas malmultaj. Eĉ se tradukoj ne estas perfektaj, mi esperas ke vi povas senti nian intencon montri respekton.
Ĉi tiu etendo subtenas ĉiujn 17 lingvojn subtenatajn de VS Code. Krome, por README-dokumentado, ni provas traduki ankaŭ al minoritataj lingvoj kaj ŝercaj lingvoj.
Ĉi tio ne estas simple "tutmonda subteno", sed "respekto al lingva diverseco". Kaj super la lingvoj, mi esperas ke ĝi fariĝos infrastrukturo kie evoluigistoj ĉie kontribuas komitojn por plibonigi la mondon.
Rapida Komenco
Tipa agordo por administri personan konton kaj kompanian konton (Enterprise Managed User).
Paŝo 1: Preparu Viajn SSH-Ŝlosilojn
Unue, generu SSH-ŝlosilojn por ĉiu konto (preterpasu se vi jam havas):
# Persona konto
ssh-keygen -t ed25519 -C "zamenhof@personal.example.com" -f ~/.ssh/id_ed25519_personal
# Labora konto
ssh-keygen -t ed25519 -C "ludoviko.zamenhof@techcorp.example.com" -f ~/.ssh/id_ed25519_work
Registru la publikan ŝlosilon (.pub dosiero) de ĉiu ŝlosilo al la responda GitHub-konto.
Noto: Al GitHub oni registras
id_ed25519_personal.pub(publika ŝlosilo).id_ed25519_personal(sen etendo) estas la privata ŝlosilo—neniam dividu aŭ alŝutu ĝin ien ajn.
Paŝo 2: Agordu SSH
Redaktu ~/.ssh/config:
# Persona GitHub-konto (defaŭlta)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# Labora GitHub-konto
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
Paŝo 3: Agordu la Etendon
Tuj post instalado, ekzemplaj profiloj estas pretigitaj. Laŭ la suba gvidilo, redaktu ilin por via propra uzo.
Ŝlosilaj dosieroj ne estas senditaj: Kiam vi agordas SSH-ŝlosilan vojon, nur la dosiera vojo (loko) estas registrita. La enhavo de la ŝlosila dosiero neniam estas alŝutita aŭ sendata ekstere.
Se vi uzas GPG-subskribon: Vi ankaŭ povas agordi
gpgKeyIden la profila redakta ekrano. Por kiel trovi vian GPG-ŝlosilan ID, vidu "GPG-subskribo ne funkcias?".
Konsilo: Vi ankaŭ povas agordi rekte el settings.json. Malfermu etendo-agordojn (
Cmd+,/Ctrl+,) → Serĉu "Git ID Switcher" → Klaku "Redakti en settings.json". Por JSON-agordo-ekzemploj, vidu "Plena Ekzemplo: 5 Kontoj kun SSH + GPG".
Plena Ekzemplo: 5 Kontoj kun SSH + GPG
Plena ekzemplo kiu kombinas ĉion:
SSH-Agordo (~/.ssh/config)
# Persona konto (defaŭlta)
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# Labora konto (kompania Enterprise Managed User)
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
# Kliento A – kontrakta laboro (Bitbucket)
Host bitbucket-clienta
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_ed25519_clienta
IdentitiesOnly yes
# Kliento B – surloka projekto (Bitbucket)
Host bitbucket-clientb
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_ed25519_clientb
IdentitiesOnly yes
# Malfermfontaj kontribuoj (GitLab)
Host gitlab-oss
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_oss
IdentitiesOnly yes
Etendo-Agordoj
{
"gitIdSwitcher.identities": [
{
"id": "personal",
"name": "Ludoviko Zamenhof",
"email": "zamenhof@personal.example.com",
"service": "GitHub",
"icon": "🏠",
"description": "Personaj projektoj",
"sshKeyPath": "~/.ssh/id_ed25519_personal",
"sshHost": "github-personal",
"gpgKeyId": "ABCD1234EF567890"
},
{
"id": "work-main",
"name": "Ludoviko Zamenhof",
"email": "ludoviko.zamenhof@techcorp.example.com",
"service": "GitHub Laboro",
"icon": "💼",
"description": "TechCorp ĉefa laboro",
"sshKeyPath": "~/.ssh/id_ed25519_work",
"sshHost": "github-work",
"gpgKeyId": "9876543210FEDCBA"
},
{
"id": "client-a",
"name": "Ludoviko Zamenhof",
"email": "zamenhof@clienta.example.com",
"service": "Bitbucket",
"icon": "🏢",
"description": "ClientA kontrakto",
"sshKeyPath": "~/.ssh/id_ed25519_clienta",
"sshHost": "bitbucket-clienta"
},
{
"id": "client-b",
"name": "L.Zamenhof",
"email": "l.zamenhof@clientb.example.com",
"service": "Bitbucket",
"icon": "🏭",
"description": "ClientB surloke",
"sshKeyPath": "~/.ssh/id_ed25519_clientb",
"sshHost": "bitbucket-clientb"
},
{
"id": "oss",
"name": "zamenhof-dev",
"email": "zamenhof.dev@example.com",
"service": "GitLab",
"icon": "🌟",
"description": "OSS kontribuoj",
"sshKeyPath": "~/.ssh/id_ed25519_oss",
"sshHost": "gitlab-oss"
}
],
"gitIdSwitcher.defaultIdentity": "personal",
"gitIdSwitcher.autoSwitchSshKey": true,
"gitIdSwitcher.applyToSubmodules": true
}
Noto: La 4-a profilo (client-b) uzas mallongigitan nomon, kaj la 5-a (oss) programistan kaŝnomon. Vi povas agordi malsamajn montrnomojn por ĉiu profilo, eĉ por la sama persono.
Profila Administrado
Klaku statusbreton → Malfermu "Profila Administrado" ĉe la fundo de la listo. Ĉiuj profilo-operacioj—aldoni, redakti, forigi, reordigi—estas rekte alireblaj el la UI.
Vi ankaŭ povas forigi profilon el komand-paleto per Git ID Switcher: Delete Identity.
Komandoj
| Komando | Priskribo |
|---|---|
Git ID Switcher: Select Identity | Malfermu la profilo-elektilon |
Git ID Switcher: Delete Identity | Forigu profilon |
Git ID Switcher: Show Current Identity | Montru nunan profilo-informon |
Git ID Switcher: Show Documentation | Montri dokumentaron |
Agorda Referenco
Profilo-Propraĵoj
| Propraĵo | Deviga | Priskribo |
|---|---|---|
id | ✅ | Unika identigilo (ekz: "personal", "work-main") |
name | ✅ | Git user.name — montrita en commit-oj |
email | ✅ | Git user.email — montrita en commit-oj |
icon | Emoji montrita en statusbreto (ekz: "🏠"). Nur unu emoji | |
service | Serva nomo (ekz: "GitHub", "GitLab"). Por UI | |
description | Mallonga priskribo por elektilo kaj konsileto | |
sshKeyPath | Vojo al privata SSH-ŝlosilo (ekz: "~/.ssh/id_ed25519_work") | |
sshHost | SSH-agordo gastiga kaŝnomo (ekz: "github-work") | |
gpgKeyId | GPG-ŝlosila ID por commit-subskribo |
Montraj Limigoj
- Statusbreto: Teksto pli longa ol ~25 signoj estos mallongigita per
... icon: Nur unu emoji (grapheme cluster) permesata. Multaj emojioj aŭ longa teksto ne funkcias
Ĝeneralaj Agordoj
| Agordo | Defaŭlto | Priskribo |
|---|---|---|
gitIdSwitcher.identities | Ekzemplo ref | Listo de profilo-agordoj |
gitIdSwitcher.defaultIdentity | Ekzemplo ref | Defaŭlta profilo ID |
gitIdSwitcher.autoSwitchSshKey | true | Aŭtomate ŝanĝu SSH-ŝlosilon |
gitIdSwitcher.showNotifications | true | Montru sciigon kiam ŝanĝante profilon |
gitIdSwitcher.applyToSubmodules | true | Apliku profilon al Git-submoduloj |
gitIdSwitcher.submoduleDepth | 1 | Maks. profundeco por nestitaj submoduloj (1-5) |
gitIdSwitcher.includeIconInGitConfig | false | Skribu emoji-ikonon al Git-agordo user.name |
gitIdSwitcher.syncCheck.enabled | true | Kontroli ĉu elektita profilo kongruas kun reala git-agordo |
gitIdSwitcher.syncCheck.onFocusReturn | true | Ruli sync-kontrolon kiam la redaktilo-fenestro rericevos fokuson |
gitIdSwitcher.logging.fileEnabled | false | Konservu reviziajn protokolojn en dosiero (ID-ŝanĝoj, SSH-operacioj ktp.) |
gitIdSwitcher.logging.filePath | "" | Protokol-dosiera vojo (ekz: ~/.git-id-switcher/security.log). Malplena = def |
gitIdSwitcher.logging.maxFileSize | 10485760 | Maks. dosiera grandeco antaŭ rotacio (bajtoj, 1MB-100MB) |
gitIdSwitcher.logging.maxFiles | 5 | Nombro de protokol-dosieroj por konservi (1-20) |
gitIdSwitcher.logging.redactAllSensitive | false | Kiam ebligita, ĉiuj valoroj estas maskitaj en protokoloj (maks. privateco) |
gitIdSwitcher.logging.level | "INFO" | Protokolado-nivelo (DEBUG/INFO/WARN/ERROR/SECURITY). Registras elektitan+supre |
gitIdSwitcher.commandTimeouts | {} | Persona tempolimo por komandoj (ms, 1s-5min) ekz: {"git":15000,"ssh-add":...} |
Pri includeIconInGitConfig
Kontrolas konduton kiam icon-kampo estas agordita:
| Valoro | Konduto |
|---|---|
false (defaŭlto) | icon montriĝas nur en redaktilo-UI. Nur name estas skribita al Git-agordo |
true | icon + name estas skribita al Git-agordo. Emoji restas en commit-historio |
Ekzemplo: icon: "👤", name: "Ludoviko Zamenhof"
| includeIconInGitConfig | Git-agordo user.name | Commit-subskribo |
|---|---|---|
false | Ludoviko Zamenhof | Ludoviko Zamenhof <retpoŝto> |
true | 👤 Ludoviko Zamenhof | 👤 Ludoviko Zamenhof <retpoŝto> |
Kiel Ĝi Funkcias
Git-Agordo Tavola Strukturo
Git-agordo havas tri tavolojn; pli malaltaj tavoloj superskribas pli altajn:
Sistemo (/etc/gitconfig)
↓ superskribas
Ĝenerala (~/.gitconfig)
↓ superskribas
Loka (.git/config) ← plej alta prioritato
Git ID Switcher skribas al --local (deponeja loka) nivelo.
Tio signifas:
- Profilo estas konservita en la
.git/config-dosiero de ĉiu deponejo - Malsamaj profiloj povas esti konservitaj por ĉiu deponejo
- Ĝeneralaj agordoj (
~/.gitconfig) ne estas modifitaj
Profilo-Ŝanĝa Konduto
Kiam vi ŝanĝas profilon, la etendo plenumas (en ordo):
- Git-Agordo (ĉiam): Agordas
git config --local user.namekajuser.email - SSH-Ŝlosilo (se
sshKeyPathagordita): Forigas aliajn ŝlosilojn el ssh-agent, aldonas la elektitan - GPG-Ŝlosilo (se
gpgKeyIdagordita): Agordasgit config --local user.signingkeykaj ebligas subskribon - Submoduloj (se ebligita): Disvastigas agordon al ĉiuj submoduloj (defaŭlte: profundeco 1)
- Sync Check: Kontrolas ĉu la aplikita profilo kongruas kun la reala git-agordo
Sync Check
Komparas la elektitan profilon kun la realaj git config --local-valoroj (user.name, user.email, user.signingkey) kaj montras statusbretan averton kiam malkongruo estas detektita.
Kiam kontroloj rulas:
- Tuj post profilo-apliko
- Ĉe laborspaca dosieruja ŝanĝo
- Ĉe agorda ŝanĝo
- Kiam la redaktilo-fenestro rericevos fokuson (malrapidita 500ms)
Kiam malkongruo estas detektita:
- La statusbreto montras ⚠️-ikonon kun avertan fondokoloron
- La konsileto montras tabelon kun la malkongruaj kampoj (kampo, atendita valoro, reala valoro)
- Klaki la statusbreton prezentas solvajn eblojn:
- Reapliki profilon — Reapliki la nunan profilon al git-agordo
- Elekti alian profilon — Malfermi la profilo-elektilon
- Ignori — Kaŝi la averton ĝis la sekva kontrolo
Por malebligi:
Agordu gitIdSwitcher.syncCheck.enabled al false por malebligi ĉiujn sync-kontrolojn.
Por malebligi nur la fokuso-reveno-kontrolon, agordu gitIdSwitcher.syncCheck.onFocusReturn al false.
Submodula Disvastiga Mekanismo
Ĉar loka agordo funkcias sur deponeja nivelo, ĝi ne aŭtomate aplikiĝas al submoduloj. Tial ĉi tiu etendo provizas submodulan disvastigan funkcion (vidu "Altnivela: Submodula Subteno" por detaloj).
SSH-Ŝlosila Administrada Detaloj
Git ID Switcher administras SSH-ŝlosilojn per ssh-agent:
| Operacio | Plenumita komando |
|---|---|
| Aldonu ŝlosilon | ssh-add <keyPath> |
| Forigu ŝlosilon | ssh-add -d <keyPath> |
| Listo ŝlosilojn | ssh-add -l |
Grava: Ĉi tiu etendo ne modifas ~/.ssh/config. Vi devas mane agordi SSH config (vidu Paŝo 2 en "Rapida Komenco").
Interagado kun Ekzistantaj SSH-Agordoj
Se vi jam havas SSH-agordojn, Git ID Switcher funkcias jene:
| Via Agordo | Git ID Switcher Konduto |
|---|---|
~/.ssh/config kun IdentityFile | Ambaŭ uzeblas; IdentitiesOnly yes malhelpas konfliktojn |
Mediovariablo GIT_SSH_COMMAND | Uzas propran SSH-komandon; ssh-agent ankoraŭ funkcias |
git config core.sshCommand | Same kiel supre |
| direnv kun SSH-rilataj mediovariabloj | Povas kunekzisti; ssh-agent funkcias sendepende |
Rekomendo: Ĉiam uzu IdentitiesOnly yes en SSH config. Ĉi tio malhelpas SSH provi plurajn ŝlosilojn.
Kial IdentitiesOnly yes?
Sen ĉi tiu agordo, SSH eble provas ŝlosilojn en ĉi tiu ordo:
- Ŝlosiloj ŝarĝitaj en ssh-agent (administritaj de Git ID Switcher)
- Ŝlosiloj specifitaj en
~/.ssh/config - Defaŭltaj ŝlosiloj (
~/.ssh/id_rsa,~/.ssh/id_ed25519ktp.)
Ĉi tio povas kaŭzi aŭtentikig-malsukceson aŭ uzon de neintencita ŝlosilo.
Kun IdentitiesOnly yes, SSH uzas nur la specifitan ŝlosilon. Ĉi tio certigas ke via Git ID Switcher-agordita ŝlosilo estas uzata.
# Rekomendita agordo
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes # ← Ĉi tiu linio estas grava
Kun ĉi tiu agordo, kiam vi konektas al la gastigo github-work, nur ~/.ssh/id_ed25519_work estos uzata, kaj neniuj aliaj ŝlosiloj estos provitaj.
Altnivela: Submodula Subteno
Por kompleksaj deponejoj kun Git-submoduloj, profila administrado ofte malfacilas. Se vi faras commit en submodulo, Git uzas la lokan agordon de tiu submodulo; se ne eksplicite agordita, ĝi povas reveni al la ĝenerala agordo (malĝusta retpoŝto!).
Git ID Switcher aŭtomate detektas submodulojn kaj aplikas la elektitan profilon al ili.
{
"gitIdSwitcher.applyToSubmodules": true,
"gitIdSwitcher.submoduleDepth": 1
}
applyToSubmodules: Ebligi/malebligi ĉi tiun funkcionsubmoduleDepth: Kiom profunde iri?1: Nur rektaj submoduloj (plej ofta)2+: Nestitaj submoduloj (submoduloj ene de submoduloj)
Ĉi tio certigas ke via profilo ĉiam estas ĝusta, ĉu vi faras commit en la ĉefa deponejo aŭ en vendora biblioteko.
Problemsolvado
SSH-ŝlosilo ne ŝanĝiĝas?
-
Certigu ke
ssh-agentfunkcias:eval "$(ssh-agent -s)" -
Kontrolu ke la ŝlosila vojo estas ĝusta:
ls -la ~/.ssh/id_ed25519_* -
Sur macOS, aldonu al Keychain unufoje:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_work
Malĝusta profilo ĉe push?
Por novaj klonoj:
Kiam vi klonas laboran deponejon, uzu la gastigon-kaŝnomon el via SSH config:
# Por labora profilo (uzas github-work kaŝnomon)
git clone git@github-work:kompanio/repo.git
# Por persona profilo (uzas defaŭltan github.com)
git clone git@github.com:via-nomo/repo.git
Por ekzistantaj deponejoj:
-
Kontrolu ke la fora URL uzas la ĝustan gastigan kaŝnomon:
git remote -v # Por laboraj deponejoj devus montri git@github-work:... -
Ĝisdatigu se necese:
git remote set-url origin git@github-work:kompanio/repo.git
GPG-subskribo ne funkcias?
-
Trovu vian GPG-ŝlosilan ID:
gpg --list-secret-keys --keyid-format SHORT -
Testu subskribon:
echo "test" | gpg --clearsign -
Certigu ke la retpoŝto en via profilo kongruas kun la retpoŝto de la GPG-ŝlosilo.
Profilo ne detektita?
- Certigu ke vi estas en Git-deponejo
- Kontrolu sintaksan eraron en
settings.json - Reŝargu VS Code fenestron (
Cmd+Shift+P→ "Reŝargi Fenestron")
Eraro en name-kampo?
Se la name-kampo enhavas la jenajn signojn, eraro okazas:
` $ ( ) { } | & < >
Se vi volas inkluzivi servan nomon, uzu la service-kampon.
// MALĜUSTA
"name": "Ludoviko Zamenhof (Persona)"
// ĜUSTA
"name": "Ludoviko Zamenhof",
"service": "GitHub"
Novaj agordoj ne aperas?
Eĉ post ĝisdatigo de la etendo, novaj agordoj eble ne aperos en la agord-ekrano.
Solvo: Restartigi vian maŝinon tute.
Redaktiloj kiel VS Code konservas agord-skemon en memoro, kaj "Reŝargi Fenestron" aŭ reinstali la etendon eble ne sufiĉas.
Defaŭltaj valoroj (identities ktp.) malplenaj?
Se ekzemplaj agordoj ne aperas eĉ ĉe nova instalado, la kaŭzo eble estas Settings Sync.
Se vi antaŭe konservis malplenajn agordojn, ili estis sinkronigitaj al la nubo kaj eble superskribus defaŭltajn valorojn ĉe nova instalado.
Solvo:
- Trovu la rilatan agordon en agord-ekrano
- Dentrado-ikono → Elektu "Restarigi Agordon"
- Sinkronigu per Settings Sync (malnovaj agordoj estos forigitaj el la nubo)
Pri Esperanto 📚
| Esperanto | English | Priskribo |
|---|---|---|
| Saluton! | Hello! | Ĝenerala saluto |
| Dankon! | Thank you! | Esprimi dankon |
| Bonvolu | Please | Ĝentile peti |
| Ĝis revido | Goodbye | Ĝis ni renkontiĝos denove |
Lerni Esperanton
- Lernu.net - Senpaga Esperanto-lernejo
- Duolingo Esperanto
- Vikipedio en Esperanto
Dezajna Filozofio
"Kiu mi estas?" — La sola demando, kiun ĉi tiu etendaĵo respondas.
Konstruita sur Karesansui-Arkitekturo: simpla kerno (100 linioj), ĉirkaŭita de intenca kvalito (90% kovrado, protokolado, tempolimoj) kaj konsciaj limigoj (sen GitHub API, sen ĵetonoadministrado).
Kontribuado
Ni bonvenigas kontribuojn! Vidu CONTRIBUTING.md.
Permesilo
MIT-Permesilo - Vidu LICENSE.
Kreditoj
Kreita de Null;Variant
🌍 La espero - La mondo apartenas al ĉiuj! 🌍
(Hope - The world belongs to everyone!)