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.


Git ID Switcher Ŝ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.

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

🎯 Kial Git ID Switcher?

Kvankam multaj Git-profilo-ŝanĝiloj ekzistas, Git ID Switcher solvas kompleksajn problemojn kiujn aliaj ignoras:

  1. Submodula Koŝmaro: Laborante kun deponejoj havantaj submodulojn (ekz: Hugo-temoj, vendoraj bibliotekoj), oni kutime devas mane agordi git config user.name por ĉiu submodulo. Ĉi tiu etendo traktas ĝin elegante, rekursie aplikante vian profilon al ĉiuj aktivaj submoduloj.
  2. 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.

Unua agordo-proceduro (13 paŝoj): malfermu profilan administradon el statusbreto, redaktu kaj kreu novajn profilojn

Ŝ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 gpgKeyId en 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.

Profila administrado: gvidilo pri forigo kaj reordigado

Vi ankaŭ povas forigi profilon el komand-paleto per Git ID Switcher: Delete Identity.


Komandoj

KomandoPriskribo
Git ID Switcher: Select IdentityMalfermu la profilo-elektilon
Git ID Switcher: Delete IdentityForigu profilon
Git ID Switcher: Show Current IdentityMontru nunan profilo-informon
Git ID Switcher: Show DocumentationMontri dokumentaron

Agorda Referenco

Profilo-Propraĵoj

PropraĵoDevigaPriskribo
idUnika identigilo (ekz: "personal", "work-main")
nameGit user.name — montrita en commit-oj
emailGit user.email — montrita en commit-oj
iconEmoji montrita en statusbreto (ekz: "🏠"). Nur unu emoji
serviceServa nomo (ekz: "GitHub", "GitLab"). Por UI
descriptionMallonga priskribo por elektilo kaj konsileto
sshKeyPathVojo al privata SSH-ŝlosilo (ekz: "~/.ssh/id_ed25519_work")
sshHostSSH-agordo gastiga kaŝnomo (ekz: "github-work")
gpgKeyIdGPG-ŝ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

AgordoDefaŭltoPriskribo
gitIdSwitcher.identitiesEkzemplo refListo de profilo-agordoj
gitIdSwitcher.defaultIdentityEkzemplo refDefaŭlta profilo ID
gitIdSwitcher.autoSwitchSshKeytrueAŭtomate ŝanĝu SSH-ŝlosilon
gitIdSwitcher.showNotificationstrueMontru sciigon kiam ŝanĝante profilon
gitIdSwitcher.applyToSubmodulestrueApliku profilon al Git-submoduloj
gitIdSwitcher.submoduleDepth1Maks. profundeco por nestitaj submoduloj (1-5)
gitIdSwitcher.includeIconInGitConfigfalseSkribu emoji-ikonon al Git-agordo user.name
gitIdSwitcher.syncCheck.enabledtrueKontroli ĉu elektita profilo kongruas kun reala git-agordo
gitIdSwitcher.syncCheck.onFocusReturntrueRuli sync-kontrolon kiam la redaktilo-fenestro rericevos fokuson
gitIdSwitcher.logging.fileEnabledfalseKonservu 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.maxFileSize10485760Maks. dosiera grandeco antaŭ rotacio (bajtoj, 1MB-100MB)
gitIdSwitcher.logging.maxFiles5Nombro de protokol-dosieroj por konservi (1-20)
gitIdSwitcher.logging.redactAllSensitivefalseKiam 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:

ValoroKonduto
false (defaŭlto)icon montriĝas nur en redaktilo-UI. Nur name estas skribita al Git-agordo
trueicon + name estas skribita al Git-agordo. Emoji restas en commit-historio

Ekzemplo: icon: "👤", name: "Ludoviko Zamenhof"

includeIconInGitConfigGit-agordo user.nameCommit-subskribo
falseLudoviko ZamenhofLudoviko 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):

  1. Git-Agordo (ĉiam): Agordas git config --local user.name kaj user.email
  2. SSH-Ŝlosilo (se sshKeyPath agordita): Forigas aliajn ŝlosilojn el ssh-agent, aldonas la elektitan
  3. GPG-Ŝlosilo (se gpgKeyId agordita): Agordas git config --local user.signingkey kaj ebligas subskribon
  4. Submoduloj (se ebligita): Disvastigas agordon al ĉiuj submoduloj (defaŭlte: profundeco 1)
  5. 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:

OperacioPlenumita komando
Aldonu ŝlosilonssh-add <keyPath>
Forigu ŝlosilonssh-add -d <keyPath>
Listo ŝlosilojnssh-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 AgordoGit ID Switcher Konduto
~/.ssh/config kun IdentityFileAmbaŭ uzeblas; IdentitiesOnly yes malhelpas konfliktojn
Mediovariablo GIT_SSH_COMMANDUzas propran SSH-komandon; ssh-agent ankoraŭ funkcias
git config core.sshCommandSame kiel supre
direnv kun SSH-rilataj mediovariablojPovas 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:

  1. Ŝlosiloj ŝarĝitaj en ssh-agent (administritaj de Git ID Switcher)
  2. Ŝlosiloj specifitaj en ~/.ssh/config
  3. Defaŭltaj ŝlosiloj (~/.ssh/id_rsa, ~/.ssh/id_ed25519 ktp.)

Ĉ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 funkcion
  • submoduleDepth: 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?

  1. Certigu ke ssh-agent funkcias:

    eval "$(ssh-agent -s)"
    
  2. Kontrolu ke la ŝlosila vojo estas ĝusta:

    ls -la ~/.ssh/id_ed25519_*
    
  3. 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:

  1. Kontrolu ke la fora URL uzas la ĝustan gastigan kaŝnomon:

    git remote -v
    # Por laboraj deponejoj devus montri git@github-work:...
    
  2. Ĝisdatigu se necese:

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

GPG-subskribo ne funkcias?

  1. Trovu vian GPG-ŝlosilan ID:

    gpg --list-secret-keys --keyid-format SHORT
    
  2. Testu subskribon:

    echo "test" | gpg --clearsign
    
  3. 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:

  1. Trovu la rilatan agordon en agord-ekrano
  2. Dentrado-ikono → Elektu "Restarigi Agordon"
  3. Sinkronigu per Settings Sync (malnovaj agordoj estos forigitaj el la nubo)

Pri Esperanto 📚

EsperantoEnglishPriskribo
Saluton!Hello!Ĝenerala saluto
Dankon!Thank you!Esprimi dankon
BonvoluPleaseĜentile peti
Ĝis revidoGoodbyeĜis ni renkontiĝos denove

Lerni Esperanton


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).

Karesansui Architecture

Legu la plenan filozofion


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!)