Git ID Switcher
May 8, 2026 · View on GitHub
|
|
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.
|
🎯 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í:
- 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.namepro každý submodul. Toto rozšíření to elegantně řeší rekurzivní aplikací vašeho profilu na všechny aktivní submoduly. - 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.
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
gpgKeyIdna 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.
Profily můžete také mazat z palety příkazů pomocí Git ID Switcher: Delete Identity.
Příkazy
| Příkaz | Popis |
|---|---|
Git ID Switcher: Select Identity | Otevřít výběr profilu |
Git ID Switcher: Delete Identity | Smazat profil |
Git ID Switcher: Show Current Identity | Zobrazit info o aktuálním profilu |
Git ID Switcher: Show Documentation | Zobrazit dokumentaci |
Reference konfigurace
Vlastnosti profilu
| Vlastnost | Povinná | Popis |
|---|---|---|
id | ✅ | Jedinečný identifikátor (např.: "personal", "work") |
name | ✅ | Git user.name — zobrazeno v commitech |
email | ✅ | Git user.email — zobrazeno v commitech |
icon | Emoji ve stavovém řádku (např.: "🏠"). Pouze jedno emoji | |
service | Název služby (např.: "GitHub", "GitLab"). Používá se pro zobrazení v UI | |
description | Krátký popis ve výběru a nápovědě | |
sshKeyPath | Cesta k soukromému SSH klíči (např.: "~/.ssh/id_ed25519_work") | |
sshHost | SSH config host alias (např.: "github-work") | |
gpgKeyId | ID 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.identities | Viz příklad | Seznam konfigurací profilů |
gitIdSwitcher.defaultIdentity | Viz příklad | ID výchozího profilu |
gitIdSwitcher.autoSwitchSshKey | true | Automaticky přepínat SSH klíč při změně profilu |
gitIdSwitcher.showNotifications | true | Zobrazit oznámení při přepnutí profilu |
gitIdSwitcher.applyToSubmodules | true | Aplikovat profil na Git submoduly |
gitIdSwitcher.submoduleDepth | 1 | Maximální hloubka pro vnořené submoduly (1-5) |
gitIdSwitcher.includeIconInGitConfig | false | Zahrnout emoji ikonu do Git config user.name |
gitIdSwitcher.syncCheck.enabled | true | Kontrola, zda vybraný profil odpovídá skutečnému git config |
gitIdSwitcher.syncCheck.onFocusReturn | true | Spustit kontrolu synchronizace při návratu fokusu do okna editoru |
gitIdSwitcher.logging.fileEnabled | false | Zapnout 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.maxFileSize | 10485760 | Maximální velikost souboru před rotací (bajty, 1MB-100MB) |
gitIdSwitcher.logging.maxFiles | 5 | Maximální počet rotovaných log souborů (1-20) |
gitIdSwitcher.logging.redactAllSensitive | false | Pokud 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:
| Hodnota | Chování |
|---|---|
false (výchozí) | icon se zobrazuje pouze v rozhraní editoru. Do Git configu se zapisuje pouze name |
true | Do Git configu se zapisuje icon + name. Emoji se objeví v historii commitů |
Příklad: icon: "👤", name: "Alex Novák"
| includeIconInGitConfig | Git config user.name | Podpis commitu |
|---|---|---|
false | Alex Novák | Alex 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/configkaž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í):
- Git konfigurace (vždy): Nastaví
git config --local user.nameauser.email - SSH klíč (pokud je nastaven
sshKeyPath): Odstraní ostatní klíče z ssh-agent, přidá vybraný - GPG klíč (pokud je nastaven
gpgKeyId): Nastavígit config --local user.signingkeya povolí podepisování - Submoduly (pokud povoleno): Propaguje konfiguraci do všech submodulů (výchozí: hloubka 1)
- 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:
| Operace | Prováděný příkaz |
|---|---|
| Přidání klíče | ssh-add <keyPath> |
| Odebrání klíče | ssh-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/config | Oba lze použít; IdentitiesOnly yes zabraňuje konfliktům |
Nastavena proměnná prostředí GIT_SSH_COMMAND | Použije se vlastní SSH příkaz; ssh-agent nadále funguje |
Nastaven git config core.sshCommand | Stejné jako výše |
| Proměnné prostředí související s SSH nastaveny v direnv | Koexistuje; 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í:
- Klíče načtené v ssh-agent (spravované Git ID Switcherem)
- Klíče specifikované v
~/.ssh/config - Výchozí klíče (
~/.ssh/id_rsa,~/.ssh/id_ed25519atd.)
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 funkcisubmoduleDepth: 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á?
-
Ujistěte se, že
ssh-agentběží:eval "$(ssh-agent -s)" -
Zkontrolujte, že cesta ke klíči je správná:
ls -la ~/.ssh/id_ed25519_* -
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:
-
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 -
Aktualizujte pokud je třeba:
git remote set-url origin git@github-work:company/repo.git
GPG podepisování nefunguje?
-
Najděte ID vašeho GPG klíče:
gpg --list-secret-keys --keyid-format SHORT -
Otestujte podepisování:
echo "test" | gpg --clearsign -
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.jsonnemá 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í:
- Najděte nastavení v rozhraní nastavení
- Klikněte na ikonu ozubeného kola → „Resetovat nastavení"
- 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ů).
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