Git ID Switcher

May 8, 2026 · View on GitHub

Git ID Switcher Přepínejte mezi více Git profily jedním kliknutím. Spravujte více GitHub účtů, SSH klíče, GPG podepisování a automaticky aplikujte profil na Git submoduly.

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

🎯 Proč Git ID Switcher?

I když existuje mnoho nástrojů pro přepínání Git profilů, Git ID Switcher řeší složité problémy, které jiné často ignorují:

  1. Noční můra submodulů: Při práci s repozitáři obsahujícími submoduly (Hugo témata, vendor knihovny atd.) je obvykle nutné ručně nastavit git config user.name pro každý submodul. Toto rozšíření to elegantně řeší rekurzivní aplikací vašeho profilu na všechny aktivní submoduly.
  2. Zpracování SSH & GPG: Nemění jen vaše jméno — také vyměňuje SSH klíče v agentovi a konfiguruje GPG podepisování, takže nikdy neuděláte commit s nesprávným podpisem.

Funkce

  • UI pro správu profilů: Přidávejte, upravujte, mažte a přeřazujte profily bez úpravy settings.json
  • Přepnutí profilu jedním klikem: Okamžitá změna Git user.name a user.email
  • Integrace do stavového řádku: Vždy vidíte aktuální profil
  • Kontrola synchronizace: Detekce nesouladu mezi profilem a git config v reálném čase s varováním ve stavovém řádku
  • Podpora submodulů: Automatická propagace profilu do Git submodulů
  • Správa SSH klíčů: Automatické přepínání SSH klíčů v ssh-agent
  • Podpora GPG podepisování: Konfigurace GPG klíče pro podepisování commitů (volitelné)
  • Podrobné nápovědy: Kompletní informace s popisem a SSH hostem
  • Multiplatformní: Funguje na macOS, Linux a Windows
  • Vícejazyčný: Podporuje 17 jazyků

🌏 Poznámka k vícejazyčné podpoře

Oceňuji existenci menšin. Nechci je zavrhnout jen proto, že jich je málo. I když překlady nejsou dokonalé, doufám, že pocítíte náš záměr porozumět a projevit respekt menšinovým jazykům.

Toto rozšíření podporuje všech 17 jazyků, které podporuje VS Code. Navíc se u README dokumentace pokoušíme překládat do menšinových jazyků a dokonce i vtipných jazyků.

To není jen „globální podpora" — je to „respekt k jazykové rozmanitosti". A budu rád, když se to stane infrastrukturou, kde commity zlepšující svět přicházejí od vývojářů odkudkoli, překonávajících jazykové bariéry.


Rychlý start

Typické nastavení pro správu osobního účtu a pracovního účtu (Enterprise Managed User).

Krok 1: Připravte SSH klíče

Nejprve vytvořte SSH klíče pro každý účet (přeskočte, pokud již máte):

# Osobní
ssh-keygen -t ed25519 -C "alex@personal.example.com" -f ~/.ssh/id_ed25519_personal

# Pracovní
ssh-keygen -t ed25519 -C "alex.novak@techcorp.example.com" -f ~/.ssh/id_ed25519_work

Zaregistrujte veřejný klíč (soubor .pub) každého klíče na příslušném GitHub účtu.

Poznámka: Na GitHub registrujete id_ed25519_personal.pub (veřejný klíč). id_ed25519_personal (bez přípony) je soukromý klíč — nikdy ho nesdílejte ani nenahrávejte nikam.

Krok 2: Nakonfigurujte SSH

Upravte ~/.ssh/config:

# Osobní GitHub účet (výchozí)
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    IdentitiesOnly yes

# Pracovní GitHub účet
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

Krok 3: Nakonfigurujte rozšíření

Po instalaci jsou připraveny ukázkové profily. Postupujte podle níže uvedeného průvodce a upravte je podle svých potřeb.

Průvodce prvním nastavením (13 kroků): Otevřete správu profilů ze stavového řádku, upravte a vytvořte nové

Soubory klíčů se neodesílají: Při nastavení cesty k SSH klíči se zaznamenává pouze cesta (umístění) k souboru klíče. Obsah souboru klíče nebude nikdy nahrán nebo odeslán externě.

Pokud používáte GPG podepisování: Můžete také nastavit gpgKeyId na obrazovce úprav profilu. Informace o nalezení ID GPG klíče viz „Řešení problémů".

Tip: Můžete také konfigurovat přímo v settings.json. Otevřete nastavení rozšíření (Cmd+, / Ctrl+,) → vyhledejte „Git ID Switcher" → klikněte na „Upravit v settings.json". Příklad konfigurace ve formátu JSON viz „Kompletní příklad konfigurace".


Kompletní příklad konfigurace: 5 účtů s SSH + GPG

Kompletní příklad kombinující vše:

SSH konfigurace (~/.ssh/config)

# Osobní účet (výchozí)
Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    IdentitiesOnly yes

# Pracovní účet (Enterprise Managed User od společnosti)
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

# Klient A – zakázková práce (Bitbucket)
Host bitbucket-clienta
    HostName bitbucket.org
    User git
    IdentityFile ~/.ssh/id_ed25519_clienta
    IdentitiesOnly yes

# Klient B – projekt na místě (Bitbucket)
Host bitbucket-clientb
    HostName bitbucket.org
    User git
    IdentityFile ~/.ssh/id_ed25519_clientb
    IdentitiesOnly yes

# OSS příspěvky (GitLab)
Host gitlab-oss
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_ed25519_oss
    IdentitiesOnly yes

Nastavení rozšíření

{
  "gitIdSwitcher.identities": [
    {
      "id": "personal",
      "name": "Alex Novák",
      "email": "alex@personal.example.com",
      "service": "GitHub",
      "icon": "🏠",
      "description": "Osobní projekty",
      "sshKeyPath": "~/.ssh/id_ed25519_personal",
      "sshHost": "github-personal",
      "gpgKeyId": "ABCD1234EF567890"
    },
    {
      "id": "work-main",
      "name": "Alex Novák",
      "email": "alex.novak@techcorp.example.com",
      "service": "GitHub Práce",
      "icon": "💼",
      "description": "TechCorp hlavní práce",
      "sshKeyPath": "~/.ssh/id_ed25519_work",
      "sshHost": "github-work",
      "gpgKeyId": "9876543210FEDCBA"
    },
    {
      "id": "client-a",
      "name": "Alex Novák",
      "email": "alex@clienta.example.com",
      "service": "Bitbucket",
      "icon": "🏢",
      "description": "ClientA zakázka",
      "sshKeyPath": "~/.ssh/id_ed25519_clienta",
      "sshHost": "bitbucket-clienta"
    },
    {
      "id": "client-b",
      "name": "A.Novák",
      "email": "a.novak@clientb.example.com",
      "service": "Bitbucket",
      "icon": "🏭",
      "description": "ClientB na místě",
      "sshKeyPath": "~/.ssh/id_ed25519_clientb",
      "sshHost": "bitbucket-clientb"
    },
    {
      "id": "oss",
      "name": "alex-dev",
      "email": "alex.dev@example.com",
      "service": "GitLab",
      "icon": "🌟",
      "description": "Příspěvky do OSS",
      "sshKeyPath": "~/.ssh/id_ed25519_oss",
      "sshHost": "gitlab-oss"
    }
  ],
  "gitIdSwitcher.defaultIdentity": "personal",
  "gitIdSwitcher.autoSwitchSshKey": true,
  "gitIdSwitcher.applyToSubmodules": true
}

Poznámka: 4. profil (client-b) používá zkrácené jméno a 5. (oss) vývojářský handle. Pro každý profil můžete nastavit jiné zobrazované jméno, i pro tutéž osobu.


Správa profilů

Klikněte na stavový řádek → „Správa profilů" ve spodní části seznamu pro otevření obrazovky správy. Přidávání, úpravy, mazání a přeřazování profilů lze provádět přímo z UI.

Správa profilů: Průvodce operacemi mazání a přeřazování

Profily můžete také mazat z palety příkazů pomocí Git ID Switcher: Delete Identity.


Příkazy

PříkazPopis
Git ID Switcher: Select IdentityOtevřít výběr profilu
Git ID Switcher: Delete IdentitySmazat profil
Git ID Switcher: Show Current IdentityZobrazit info o aktuálním profilu
Git ID Switcher: Show DocumentationZobrazit dokumentaci

Reference konfigurace

Vlastnosti profilu

VlastnostPovinnáPopis
idJedinečný identifikátor (např.: "personal", "work")
nameGit user.name — zobrazeno v commitech
emailGit user.email — zobrazeno v commitech
iconEmoji ve stavovém řádku (např.: "🏠"). Pouze jedno emoji
serviceNázev služby (např.: "GitHub", "GitLab"). Používá se pro zobrazení v UI
descriptionKrátký popis ve výběru a nápovědě
sshKeyPathCesta k soukromému SSH klíči (např.: "~/.ssh/id_ed25519_work")
sshHostSSH config host alias (např.: "github-work")
gpgKeyIdID GPG klíče pro podepisování commitů

Omezení zobrazení

  • Stavový řádek: Text delší než ~25 znaků bude zkrácen s ...
  • icon: Povoleno pouze jedno emoji (grafémový cluster). Více emoji nebo dlouhé řetězce nejsou podporovány

Globální nastavení

NastaveníVýchozíPopis
gitIdSwitcher.identitiesViz příkladSeznam konfigurací profilů
gitIdSwitcher.defaultIdentityViz příkladID výchozího profilu
gitIdSwitcher.autoSwitchSshKeytrueAutomaticky přepínat SSH klíč při změně profilu
gitIdSwitcher.showNotificationstrueZobrazit oznámení při přepnutí profilu
gitIdSwitcher.applyToSubmodulestrueAplikovat profil na Git submoduly
gitIdSwitcher.submoduleDepth1Maximální hloubka pro vnořené submoduly (1-5)
gitIdSwitcher.includeIconInGitConfigfalseZahrnout emoji ikonu do Git config user.name
gitIdSwitcher.syncCheck.enabledtrueKontrola, zda vybraný profil odpovídá skutečnému git config
gitIdSwitcher.syncCheck.onFocusReturntrueSpustit kontrolu synchronizace při návratu fokusu do okna editoru
gitIdSwitcher.logging.fileEnabledfalseZapnout auditní logování (změny profilu, operace SSH atd.)
gitIdSwitcher.logging.filePath""Cesta k souboru logu (např.: ~/.git-id-switcher/security.log). Prázdné = výchozí umístění
gitIdSwitcher.logging.maxFileSize10485760Maximální velikost souboru před rotací (bajty, 1MB-100MB)
gitIdSwitcher.logging.maxFiles5Maximální počet rotovaných log souborů (1-20)
gitIdSwitcher.logging.redactAllSensitivefalsePokud je povoleno, všechny hodnoty jsou v protokolech maskovány (maximální soukromí)
gitIdSwitcher.logging.level"INFO"Úroveň logování (DEBUG, INFO, WARN, ERROR, SECURITY). Zaznamenává vybranou a vyšší
gitIdSwitcher.commandTimeouts{}Vlastní timeout pro příkaz (ms, 1sek-5min). Např.: {"git": 15000, "ssh-add": 10000}

O nastavení includeIconInGitConfig

Ovládá chování, když je nastaveno pole icon:

HodnotaChování
false (výchozí)icon se zobrazuje pouze v rozhraní editoru. Do Git configu se zapisuje pouze name
trueDo Git configu se zapisuje icon + name. Emoji se objeví v historii commitů

Příklad: icon: "👤", name: "Alex Novák"

includeIconInGitConfigGit config user.namePodpis commitu
falseAlex NovákAlex Novák <email>
true👤 Alex Novák👤 Alex Novák <email>

Jak to funguje

Struktura vrstev Git konfigurace

Git konfigurace má tři vrstvy, kde nižší vrstvy přepisují vyšší:

Systémová (/etc/gitconfig)
    ↓ přepisuje
Globální (~/.gitconfig)
    ↓ přepisuje
Lokální (.git/config)  ← nejvyšší priorita

Git ID Switcher zapisuje do --local (lokální pro repozitář).

To znamená:

  • Profil je uložen v .git/config každého repozitáře
  • Lze udržovat různé profily pro každý repozitář
  • Globální nastavení (~/.gitconfig) se nemění

Chování při přepnutí profilu

Při přepnutí profilu rozšíření provede (v pořadí):

  1. Git konfigurace (vždy): Nastaví git config --local user.name a user.email
  2. SSH klíč (pokud je nastaven sshKeyPath): Odstraní ostatní klíče z ssh-agent, přidá vybraný
  3. GPG klíč (pokud je nastaven gpgKeyId): Nastaví git config --local user.signingkey a povolí podepisování
  4. Submoduly (pokud povoleno): Propaguje konfiguraci do všech submodulů (výchozí: hloubka 1)
  5. Kontrola synchronizace: Ověří, že aplikovaný profil odpovídá skutečnému git config

Kontrola synchronizace

Porovnává vybraný profil se skutečnými hodnotami git config --local (user.name, user.email, user.signingkey) a při zjištění nesouladu zobrazí varování ve stavovém řádku.

Kdy se kontrola spouští:

  • Ihned po aplikaci profilu
  • Při změně složky pracovního prostoru
  • Při změně konfigurace
  • Při návratu fokusu do okna editoru (debounce 500ms)

Při zjištění nesouladu:

  • Stavový řádek zobrazí ikonu ⚠️ s varovnou barvou pozadí
  • Nápověda zobrazí tabulku s nesouladnými poli (pole, očekávaná hodnota, skutečná hodnota)
  • Kliknutím na stavový řádek se zobrazí možnosti řešení:
    • Znovu aplikovat profil — Znovu aplikovat aktuální profil na git config
    • Vybrat jiný profil — Otevřít výběr profilu
    • Ignorovat — Skrýt varování do příští kontroly

Vypnutí:

Nastavením gitIdSwitcher.syncCheck.enabled na false vypnete všechny kontroly synchronizace. Pokud chcete vypnout pouze kontrolu při návratu fokusu, nastavte gitIdSwitcher.syncCheck.onFocusReturn na false.

Mechanismus propagace do submodulů

Lokální nastavení jsou specifická pro repozitář, takže se automaticky neaplikují na submoduly. Proto toto rozšíření poskytuje funkci propagace do submodulů (podrobnosti viz „Pokročilé: Podpora submodulů").

Podrobnosti správy SSH klíčů

Git ID Switcher spravuje SSH klíče prostřednictvím ssh-agent:

OperaceProváděný příkaz
Přidání klíčessh-add <keyPath>
Odebrání klíčessh-add -d <keyPath>
Seznam klíčůssh-add -l

Důležité: Toto rozšíření nemodifikuje ~/.ssh/config. Konfiguraci SSH musíte nastavit ručně (viz „Krok 2" v Rychlém startu).

Interakce s existující SSH konfigurací

Pokud již máte konfiguraci SSH, Git ID Switcher funguje následovně:

Vaše nastaveníChování Git ID Switcheru
IdentityFile specifikován v ~/.ssh/configOba lze použít; IdentitiesOnly yes zabraňuje konfliktům
Nastavena proměnná prostředí GIT_SSH_COMMANDPoužije se vlastní SSH příkaz; ssh-agent nadále funguje
Nastaven git config core.sshCommandStejné jako výše
Proměnné prostředí související s SSH nastaveny v direnvKoexistuje; ssh-agent funguje nezávisle

Doporučeno: Vždy nastavte IdentitiesOnly yes v SSH configu. Tím se zabrání, aby SSH zkoušelo více klíčů.

Proč IdentitiesOnly yes?

Bez tohoto nastavení může SSH zkoušet klíče v tomto pořadí:

  1. Klíče načtené v ssh-agent (spravované Git ID Switcherem)
  2. Klíče specifikované v ~/.ssh/config
  3. Výchozí klíče (~/.ssh/id_rsa, ~/.ssh/id_ed25519 atd.)

To může vést k selhání autentizace nebo použití nesprávného klíče.

Nastavením IdentitiesOnly yes bude SSH používat pouze specifikovaný klíč. Tím se zajistí, že se použije klíč nastavený v Git ID Switcheru.

# Doporučená konfigurace
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes  # ← Tento řádek je důležitý

S tímto nastavením bude při připojení k hostu github-work použit pouze ~/.ssh/id_ed25519_work a žádné jiné klíče se nezkoušejí.


Pokročilé: Podpora submodulů

Pro složité repozitáře používající Git submoduly je správa profilů často problematická. Pokud uděláte commit v submodulu, Git použije lokální konfiguraci tohoto submodulu, která může použít globální konfiguraci (špatný email!), pokud není explicitně nastavena.

Git ID Switcher automaticky detekuje submoduly a aplikuje na ně vybraný profil.

{
  "gitIdSwitcher.applyToSubmodules": true,
  "gitIdSwitcher.submoduleDepth": 1
}
  • applyToSubmodules: Povolit/zakázat tuto funkci
  • submoduleDepth: Jak hluboko jít?
    • 1: Pouze přímé submoduly (nejběžnější)
    • 2+: Vnořené submoduly (submoduly v submodulech)

To zajišťuje, že váš profil je vždy správný, ať už děláte commit v hlavním repozitáři nebo ve vendor knihovně.


Řešení problémů

SSH klíč se nepřepíná?

  1. Ujistěte se, že ssh-agent běží:

    eval "$(ssh-agent -s)"
    
  2. Zkontrolujte, že cesta ke klíči je správná:

    ls -la ~/.ssh/id_ed25519_*
    
  3. Na macOS přidejte do Klíčenky jednou:

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

Špatný profil při push?

Při novém klonování:

Při klonování pracovních repozitářů použijte host alias nastavený v SSH configu:

# Pracovní (používá alias github-work)
git clone git@github-work:company/repo.git

# Osobní (používá výchozí github.com)
git clone git@github.com:yourname/repo.git

Pro existující repozitáře:

  1. Zkontrolujte, že vzdálená URL používá správný host alias:

    git remote -v
    # Mělo by zobrazit git@github-work:... pro pracovní repozitáře
    
  2. Aktualizujte pokud je třeba:

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

GPG podepisování nefunguje?

  1. Najděte ID vašeho GPG klíče:

    gpg --list-secret-keys --keyid-format SHORT
    
  2. Otestujte podepisování:

    echo "test" | gpg --clearsign
    
  3. Ujistěte se, že email v profilu odpovídá emailu GPG klíče

Profil není detekován?

  • Ujistěte se, že jste v Git repozitáři
  • Zkontrolujte, že settings.json nemá syntaktické chyby
  • Znovu načtěte okno VS Code (Cmd+Shift+P → „Znovu načíst okno")

Chyba v poli name?

Následující znaky v poli name způsobí chybu:

` $ ( ) { } | & < >

Pokud chcete zahrnout název služby, použijte pole service.

// NG
"name": "Alex Novák (Osobní)"

// OK
"name": "Alex Novák",
"service": "GitHub"

Nová nastavení se nezobrazují?

Po aktualizaci rozšíření se nová nastavení nemusí zobrazit v rozhraní nastavení.

Řešení: Kompletně restartujte počítač.

Editory založené na VS Code ukládají do mezipaměti schémata nastavení v paměti a „Znovu načíst okno" nebo přeinstalace rozšíření nemusí stačit k jejich obnovení.

Výchozí hodnoty (identities atd.) jsou prázdné?

Pokud se ukázková nastavení nezobrazují ani po čisté instalaci, příčinou může být Settings Sync.

Pokud jste dříve uložili prázdná nastavení, mohla být synchronizována do cloudu a přepisují výchozí hodnoty při nových instalacích.

Řešení:

  1. Najděte nastavení v rozhraní nastavení
  2. Klikněte na ikonu ozubeného kola → „Resetovat nastavení"
  3. Synchronizujte s Settings Sync (tím se odstraní stará nastavení z cloudu)

Filozofie návrhu

„Kdo jsem?" — Jediná otázka, na kterou toto rozšíření odpovídá

Postaveno na Architektuře Karesansui: jednoduché jádro (100 řádků). Proto zbývá prostor pro kvalitu (90% pokrytí testy, logování, timeouty) a záměrná omezení (žádné GitHub API, žádná správa tokenů).

Karesansui Architecture

Přečíst celou filozofii


Přispívání

Příspěvky jsou vítány! Viz CONTRIBUTING.md.

Licence

MIT licence — viz LICENSE.

Poděkování

Vytvořeno Null;Variant