|
|
Váltson több Git-profil között egyetlen kattintással. Kezeljen több GitHub-fiókot, SSH-kulcsokat, GPG-aláírást, és automatikusan alkalmazza a profilt a Git-almodulokra.
|
Bár sok Git-profil váltó létezik, a Git ID Switcher olyan összetett problémákat old meg, amelyeket mások gyakran figyelmen kívül hagynak:
- Az almodulok rémálma: Almodulokat tartalmazó tárolókkal (Hugo témák, vendor könyvtárak stb.) dolgozva általában manuálisan kell beállítani a
git config user.name-et minden almodulhoz. Ez a bővítmény elegánsan megoldja ezt a profil rekurzív alkalmazásával az összes aktív almodulra. - SSH és GPG kezelés: Nem csak a nevét változtatja meg; az SSH-kulcsokat is cseréli az ssh-agent-ben és konfigurálja a GPG-aláírást, így soha nem fog rossz aláírással commitolni.
- Profilkezelő UI: Profilok hozzáadása, szerkesztése, törlése és átrendezése a settings.json szerkesztése nélkül
- Egykattintásos profilváltás: Git user.name és user.email azonnali módosítása
- Állapotsáv-integráció: Aktuális profil mindig egy pillantásra látható
- Szinkronizáció-ellenőrzés: Profil és git config közötti eltérés valós idejű észlelése, állapotsáv-figyelmeztetéssel
- Almodul-támogatás: Profil automatikus alkalmazása a Git-almodulokra
- SSH-kulcs kezelés: SSH-kulcsok automatikus váltása az ssh-agent-ben
- GPG-aláírás támogatás: GPG-kulcs konfigurálása commit aláíráshoz (opcionális)
- Részletes tooltipek: Teljes körű profilinformáció leírással és SSH-hosttal
- Platformfüggetlen: Működik macOS, Linux és Windows rendszeren
- Többnyelvű: 17 nyelvet támogat
Értékelem a kisebbségek létezését. Nem akarom elvetni őket csak azért, mert kevesen vannak. Még ha a fordítások nem is tökéletesek, remélem, hogy érezni fogja szándékunkat a kisebbségi nyelvek megértésére és tiszteletére.
Ez a bővítmény mind a 17 VS Code által támogatott nyelvet támogatja. Ezen túlmenően a README dokumentációnál kihívást jelentünk magunknak kisebbségi nyelvekre és még vicces nyelvekre is fordítani.
Ez nem csak „globális támogatás" — ez „tisztelet a nyelvi sokféleség iránt". És örülnék, ha ez olyan infrastruktúrává válna, ahol a világot jobbá tevő commitok a világ minden tájáról érkező fejlesztőktől származnak, túllépve a nyelvi akadályokon.
Tipikus beállítás a személyes fiók és a vállalati fiók (Enterprise Managed User) kezeléséhez.
Először hozzon létre SSH-kulcsokat minden fiókhoz (hagyja ki, ha már megvannak):
# Személyes
ssh-keygen -t ed25519 -C "alex@personal.example.com" -f ~/.ssh/id_ed25519_personal
# Munkahelyi
ssh-keygen -t ed25519 -C "alex.nagy@techcorp.example.com" -f ~/.ssh/id_ed25519_workRegisztrálja minden kulcs nyilvános kulcsát (.pub fájl) a megfelelő GitHub-fiókhoz.
Megjegyzés: A GitHubra az
id_ed25519_personal.pub(nyilvános kulcs) kerül regisztrálásra. Azid_ed25519_personal(kiterjesztés nélkül) a privát kulcs — soha ne ossza meg és ne töltse fel sehova.
Szerkessze a ~/.ssh/config fájlt:
# Személyes GitHub-fiók (alapértelmezett)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# Munkahelyi GitHub-fiók
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yesTelepítés után minta profilok állnak rendelkezésre. Kövesse az alábbi útmutatót a saját beállításaihoz való szerkesztéshez.
A kulcsfájlok nem kerülnek elküldésre: Az SSH-kulcs elérési útjának beállításakor csak a kulcsfájl elérési útja (helye) kerül rögzítésre. A kulcsfájl tartalma soha nem kerül feltöltésre vagy külső helyre küldésre.
GPG-aláírás használata esetén: A profilszerkesztő képernyőn a
gpgKeyIdis beállítható. A GPG-kulcs azonosítójának megtalálásához lásd a „Hibaelhárítás" részt.
Tipp: Közvetlenül a settings.json-ból is konfigurálhatja. Nyissa meg a bővítmény beállításait (
Cmd+,/Ctrl+,) → keressen rá: „Git ID Switcher" → kattintson a „Szerkesztés a settings.json-ban" lehetőségre. A JSON formátumú konfigurációhoz lásd a „Teljes konfigurációs példa" részt.
Teljes példa, amely mindent kombinál:
# Személyes fiók (alapértelmezett)
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# Munkahelyi fiók (vállalati Enterprise Managed User)
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
# A ügyfél – szerződéses munka (Bitbucket)
Host bitbucket-clienta
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_ed25519_clienta
IdentitiesOnly yes
# B ügyfél – helyszíni projekt (Bitbucket)
Host bitbucket-clientb
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_ed25519_clientb
IdentitiesOnly yes
# OSS hozzájárulások (GitLab)
Host gitlab-oss
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_oss
IdentitiesOnly yes{
"gitIdSwitcher.identities": [
{
"id": "personal",
"name": "Nagy Alex",
"email": "alex@personal.example.com",
"service": "GitHub",
"icon": "🏠",
"description": "Személyes projektek",
"sshKeyPath": "~/.ssh/id_ed25519_personal",
"sshHost": "github-personal",
"gpgKeyId": "ABCD1234EF567890"
},
{
"id": "work-main",
"name": "Nagy Alex",
"email": "alex.nagy@techcorp.example.com",
"service": "GitHub Munka",
"icon": "💼",
"description": "TechCorp fő munka",
"sshKeyPath": "~/.ssh/id_ed25519_work",
"sshHost": "github-work",
"gpgKeyId": "9876543210FEDCBA"
},
{
"id": "client-a",
"name": "Nagy Alex",
"email": "alex@clienta.example.com",
"service": "Bitbucket",
"icon": "🏢",
"description": "ClientA megbízás",
"sshKeyPath": "~/.ssh/id_ed25519_clienta",
"sshHost": "bitbucket-clienta"
},
{
"id": "client-b",
"name": "A.Nagy",
"email": "a.nagy@clientb.example.com",
"service": "Bitbucket",
"icon": "🏭",
"description": "ClientB helyszíni",
"sshKeyPath": "~/.ssh/id_ed25519_clientb",
"sshHost": "bitbucket-clientb"
},
{
"id": "oss",
"name": "alex-dev",
"email": "alex.dev@example.com",
"service": "GitLab",
"icon": "🌟",
"description": "OSS hozzájárulások",
"sshKeyPath": "~/.ssh/id_ed25519_oss",
"sshHost": "gitlab-oss"
}
],
"gitIdSwitcher.defaultIdentity": "personal",
"gitIdSwitcher.autoSwitchSshKey": true,
"gitIdSwitcher.applyToSubmodules": true
}Megjegyzés: A 4. profil (client-b) rövidített nevet, az 5. (oss) fejlesztői felhasználónevet használ. Ugyanannak a személynek minden profilhoz más megjelenítési nevet állíthat be.
Kattintson az állapotsávra → a lista alján válassza a „Profilkezelés" lehetőséget a kezelőfelület megnyitásához. A profilok hozzáadása, szerkesztése, törlése és átrendezése közvetlenül az UI-ból végezhető.
A profilokat a Parancspalettából is törölheti a Git ID Switcher: Delete Identity paranccsal.
| Parancs | Leírás |
|---|---|
Git ID Switcher: Select Identity |
Profilválasztó megnyitása |
Git ID Switcher: Delete Identity |
Profil törlése |
Git ID Switcher: Show Current Identity |
Aktuális profil info megjelenítése |
Git ID Switcher: Show Documentation |
Dokumentáció megjelenítése |
| Tulajdonság | Kötelező | Leírás |
|---|---|---|
id |
✅ | Egyedi azonosító (pl.: "personal", "work") |
name |
✅ | Git user.name — commitokban jelenik meg |
email |
✅ | Git user.email — commitokban jelenik meg |
icon |
Emoji az állapotsávon (pl.: "🏠"). Csak egyetlen emoji használható |
|
service |
Szolgáltatás neve (pl.: "GitHub", "GitLab"). UI megjelenítéshez |
|
description |
Rövid leírás a választóban és tooltipben | |
sshKeyPath |
Privát SSH-kulcs elérési útja (pl.: "~/.ssh/id_ed25519_work") |
|
sshHost |
SSH config host alias (pl.: "github-work") |
|
gpgKeyId |
GPG-kulcs ID commit-aláíráshoz |
- Állapotsáv: Kb. 25 karakternél hosszabb szöveg
...-tal rövidül icon: Csak egyetlen emoji (grafémafürt) használható. Több emoji vagy hosszú szöveg nem engedélyezett
| Beállítás | Alapértelmezett | Leírás |
|---|---|---|
gitIdSwitcher.identities |
Lásd a mintát | Profil konfigurációk listája |
gitIdSwitcher.defaultIdentity |
Lásd a mintát | Alapértelmezett profil ID |
gitIdSwitcher.autoSwitchSshKey |
true |
SSH-kulcs automatikus váltása profilváltáskor |
gitIdSwitcher.showNotifications |
true |
Értesítés megjelenítése profilváltáskor |
gitIdSwitcher.applyToSubmodules |
true |
Profil alkalmazása Git-almodulokra |
gitIdSwitcher.submoduleDepth |
1 |
Max. mélység beágyazott almodulokhoz (1-5) |
gitIdSwitcher.includeIconInGitConfig |
false |
Ikon emoji beírása a Git config user.name-be |
gitIdSwitcher.syncCheck.enabled |
true |
Kiválasztott profil és a tényleges git config egyezésének ellenőrzése |
gitIdSwitcher.syncCheck.onFocusReturn |
true |
Szinkronizáció-ellenőrzés futtatása, amikor a szerkesztőablak visszakapja a fókuszt |
gitIdSwitcher.logging.fileEnabled |
false |
Audit naplózás fájlba (profilváltások, SSH műveletek, stb.) |
gitIdSwitcher.logging.filePath |
"" |
Naplófájl elérési útja (pl.: ~/.git-id-switcher/security.log). Üres = alapértelmezett hely |
gitIdSwitcher.logging.maxFileSize |
10485760 |
Max. fájlméret rotálás előtt (bájt, 1MB-100MB) |
gitIdSwitcher.logging.maxFiles |
5 |
Rotált naplófájlok max. száma (1-20) |
gitIdSwitcher.logging.redactAllSensitive |
false |
Ha engedélyezve van, minden érték maszkolva van a naplókban (maximális adatvédelem) |
gitIdSwitcher.logging.level |
"INFO" |
Naplózási szint (DEBUG, INFO, WARN, ERROR, SECURITY). A kiválasztott szint és felette |
gitIdSwitcher.commandTimeouts |
{} |
Egyedi időtúllépés parancsonként (ms, 1mp-5perc). Pl.: {"git": 15000, "ssh-add": 10000} |
Az icon mező beállítása esetén a viselkedést szabályozza:
| Érték | Viselkedés |
|---|---|
false (alapértelmezett) |
Az icon csak a szerkesztő UI-ban jelenik meg. A Git configba csak a name kerül |
true |
Az icon + name íródik a Git configba. Az emoji a commit-előzményekben is megjelenik |
Példa: icon: "👤", name: "Nagy Alex" esetén
| includeIconInGitConfig | Git config user.name |
Commit-aláírás |
|---|---|---|
false |
Nagy Alex |
Nagy Alex <email> |
true |
👤 Nagy Alex |
👤 Nagy Alex <email> |
A Git konfigurációnak három rétege van, ahol az alsó rétegeket a felsők felülírják:
Rendszer (/etc/gitconfig)
↓ felülírja
Globális (~/.gitconfig)
↓ felülírja
Lokális (.git/config) ← legmagasabb prioritás
A Git ID Switcher --local (tároló-lokális) szinten ír.
Ez azt jelenti:
- A profilt minden tároló
.git/configfájljába menti - Tárolónként különböző profilok tarthatók fenn
- A globális beállítás (
~/.gitconfig) nem módosul
Profil váltásakor a bővítmény a következőket hajtja végre (sorrendben):
- Git konfiguráció (mindig): Beállítja a
git config --local user.nameésuser.emailértékeket - SSH-kulcs (ha
sshKeyPathbe van állítva): Eltávolítja a többi kulcsot az ssh-agent-ből, hozzáadja a kiválasztottat - GPG-kulcs (ha
gpgKeyIdbe van állítva): Beállítja agit config --local user.signingkeyértéket és engedélyezi az aláírást - Almodulok (ha engedélyezve): Propagálja a konfigurációt az összes almodulba (alapértelmezett: mélység 1)
- Szinkronizáció-ellenőrzés: Ellenőrzi, hogy az alkalmazott profil megegyezik-e a tényleges git configgal
Összehasonlítja a kiválasztott profilt a tényleges git config --local értékekkel (user.name, user.email, user.signingkey), és eltérés észlelése esetén figyelmeztetést jelenít meg az állapotsávon.
Mikor fut az ellenőrzés:
- Profil alkalmazása után azonnal
- Munkaterület mappa változásakor
- Konfiguráció változásakor
- Szerkesztőablak fókusz-visszatérésekor (500ms debounce)
Eltérés észlelése esetén:
- Az állapotsáv
⚠️ ikont jelenít meg figyelmeztető háttérszínnel - A tooltip táblázatban mutatja az eltérő mezőket (mező, várt érték, tényleges érték)
- Az állapotsávra kattintva megjelennek a megoldási lehetőségek:
- Profil újraalkalmazása — Az aktuális profil újraalkalmazása a git configra
- Másik profil választása — A profilválasztó megnyitása
- Figyelmen kívül hagyás — A figyelmeztetés elrejtése a következő ellenőrzésig
Letiltás:
Állítsa a gitIdSwitcher.syncCheck.enabled értékét false-ra az összes szinkronizáció-ellenőrzés letiltásához.
Ha csak a fókusz-visszatérési ellenőrzést szeretné letiltani, állítsa a gitIdSwitcher.syncCheck.onFocusReturn értékét false-ra.
A lokális konfiguráció tároló-szintű, ezért az almodulokra nem vonatkozik automatikusan. Ezért ez a bővítmény almodul-propagációs funkciót biztosít (részletekért lásd: „Haladó: Almodul-támogatás").
A Git ID Switcher az ssh-agent-en keresztül kezeli az SSH-kulcsokat:
| Művelet | Végrehajtott parancs |
|---|---|
| Kulcs hozzáadása | ssh-add <keyPath> |
| Kulcs eltávolítása | ssh-add -d <keyPath> |
| Kulcsok listázása | ssh-add -l |
Fontos: Ez a bővítmény nem módosítja a ~/.ssh/config fájlt. Az SSH konfigurációt manuálisan kell beállítani (lásd: „Gyors kezdés" 2. lépés).
Ha már rendelkezik SSH beállításokkal, a Git ID Switcher a következőképpen működik:
| Az Ön beállítása | Git ID Switcher viselkedése |
|---|---|
~/.ssh/config-ban IdentityFile megadva |
Mindkettő használható; IdentitiesOnly yes a konfliktus megelőzésére |
GIT_SSH_COMMAND környezeti változó |
Egyéni SSH parancsot használ; az ssh-agent továbbra is működik |
git config core.sshCommand beállítva |
Ugyanaz, mint fent |
| direnv SSH-kapcsolódó környezeti változókkal | Együtt élnek; az ssh-agent függetlenül működik |
Ajánlás: Az SSH configban mindig állítsa be az IdentitiesOnly yes opciót. Ez megakadályozza, hogy az SSH több kulcsot próbáljon ki.
E beállítás nélkül az SSH a következő sorrendben próbálhatja a kulcsokat:
- Az ssh-agent-be betöltött kulcsok (amelyeket a Git ID Switcher kezel)
- A
~/.ssh/config-ban megadott kulcsok - Alapértelmezett kulcsok (
~/.ssh/id_rsa,~/.ssh/id_ed25519stb.)
Ez hitelesítési hibákhoz vagy nem szándékolt kulcshasználathoz vezethet.
Az IdentitiesOnly yes beállítással az SSH csak a megadott kulcsot használja. Ez biztosítja, hogy a Git ID Switcherben beállított kulcs kerüljön felhasználásra.
# Ajánlott beállítás
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes # ← Ez a sor fontosEzzel a beállítással a github-work hosthoz való kapcsolódáskor csak a ~/.ssh/id_ed25519_work kulcs kerül felhasználásra, más kulcsok nem lesznek kipróbálva.
Git-almodulokat használó összetett tárolók esetén a profilkezelés gyakran problémás. Ha almodulban commitol, a Git az adott almodul helyi konfigurációját használja, ami a globális konfigurációra eshet vissza (rossz email!), ha nincs explicit módon beállítva.
A Git ID Switcher automatikusan felismeri az almodulokat és alkalmazza rájuk a kiválasztott profilt.
{
"gitIdSwitcher.applyToSubmodules": true,
"gitIdSwitcher.submoduleDepth": 1
}applyToSubmodules: Funkció engedélyezése/letiltásasubmoduleDepth: Milyen mélységig menjen?1: Csak közvetlen almodulok (leggyakoribb)2+: Beágyazott almodulok (almodulok almodulokon belül)
Ez biztosítja, hogy a profilja mindig helyes legyen, akár a fő tárolóban, akár vendor könyvtárban commitol.
-
Győződjön meg róla, hogy az
ssh-agentfut:eval "$(ssh-agent -s)"
-
Ellenőrizze, hogy a kulcs elérési útja helyes:
ls -la ~/.ssh/id_ed25519_*
-
macOS-en adja hozzá a Kulcskarikához egyszer:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_work
Új klónozáskor:
Munkahelyi tárolók klónozásakor használja az SSH configban beállított host aliast:
# Munkahelyi profilhoz (github-work aliast használva)
git clone git@github-work:company/repo.git
# Személyes profilhoz (alapértelmezett github.com-ot használva)
git clone git@github.com:yourname/repo.gitMeglévő tárolók esetén:
-
Ellenőrizze, hogy a távoli URL a megfelelő host aliast használja:
git remote -v # Munkahelyi tárolóknál git@github-work:... kell legyen -
Szükség esetén frissítse:
git remote set-url origin git@github-work:company/repo.git
-
Keresse meg a GPG-kulcs ID-ját:
gpg --list-secret-keys --keyid-format SHORT
-
Tesztelje az aláírást:
echo "test" | gpg --clearsign
-
Győződjön meg róla, hogy a profilban szereplő email megegyezik a GPG-kulcs emailjével.
- Győződjön meg róla, hogy Git-tárolóban van
- Ellenőrizze, hogy a
settings.json-ban nincsenek szintaktikai hibák - Töltse újra a VS Code ablakot (
Cmd+Shift+P→ „Ablak újratöltése")
A name mező hibát okoz, ha a következő karaktereket tartalmazza:
` $ ( ) { } | & < >
Ha szolgáltatásnevet szeretne hozzáadni, használja a service mezőt.
Előfordulhat, hogy a bővítmény frissítése után az új beállítások nem jelennek meg a beállítások képernyőn.
Megoldás: Indítsa újra a teljes gépet.
A VS Code és más szerkesztők memóriában tárolják a beállítások sémáját, és ez nem mindig frissül az „Ablak újratöltése" vagy a bővítmény újratelepítése után.
Ha új telepítésnél sem jelennek meg a mintabeállítások, a Settings Sync lehet az ok.
Ha korábban üres beállításokat mentett, azok szinkronizálódtak a felhőbe, és felülírják az alapértelmezett értékeket az új telepítésnél.
Megoldás:
- Keresse meg a beállítást a beállítások képernyőn
- Kattintson a fogaskerék ikonra → „Beállítás visszaállítása"
- Szinkronizáljon a Settings Sync-kel (a régi beállítás törlődik a felhőből)
„Ki vagyok én" váltása — Az egyetlen kérdés, amire ez a bővítmény válaszol
A Karesansui Architektúrára épül: egyszerű mag (100 sor), ezért a többit minőségre (90% lefedettség, naplózás, időtúllépések) és tudatos korlátozásokra (nincs GitHub API, nincs token kezelés) fordíthatjuk.
Olvassa el a teljes filozófiát
Hozzájárulásokat szívesen fogadunk! Lásd: CONTRIBUTING.md.
MIT licenc — lásd: LICENSE.
Készítette: Null;Variant


