Git ID Switcher
May 8, 2026 · View on GitHub
|
|
Tek tıklamayla birden fazla Git profili arasında geçiş yapın. Birden fazla GitHub hesabını, SSH anahtarlarını, GPG imzalamayı yönetin ve profili Git alt modüllerine otomatik olarak uygulayın.
|
🎯 Neden Git ID Switcher?
Birçok Git profil değiştirici olmasına rağmen, Git ID Switcher diğerlerinin genellikle görmezden geldiği karmaşık sorunları çözer:
- Alt Modül Kabusu: Alt modülleri olan depolarla (Hugo temaları, vendor kütüphaneleri vb.) çalışırken, genellikle her alt modül için
git config user.name'i manuel olarak ayarlamanız gerekir. Bu eklenti, profilinizi tüm aktif alt modüllere özyinelemeli olarak uygulayarak bunu zarif bir şekilde çözer. - SSH ve GPG İşleme: Sadece adınızı değiştirmez; aynı zamanda ssh-agent'taki SSH anahtarlarınızı değiştirir ve GPG imzalamayı yapılandırır, böylece asla yanlış imzayla commit yapmazsınız.
Özellikler
- Profil Yönetimi UI: settings.json'ı düzenlemeden profil ekleme, düzenleme, silme ve sıralama
- Tek Tıkla Profil Değiştirme: Git user.name ve user.email'i anında değiştirin
- Durum Çubuğu Entegrasyonu: Mevcut profilinizi her zaman bir bakışta görün
- Senkronizasyon Kontrolü: Profil ile git config arasındaki uyumsuzlukları gerçek zamanlı tespit eder ve durum çubuğunda uyarı gösterir
- Alt Modül Desteği: Profili Git alt modüllerine otomatik olarak yayın
- SSH Anahtar Yönetimi: ssh-agent'ta SSH anahtarlarını otomatik olarak değiştirin
- GPG İmzalama Desteği: Commit imzalamak için GPG anahtarını yapılandırın (isteğe bağlı)
- Zengin Araç İpuçları: Açıklama ve SSH hostu içeren ayrıntılı profil bilgileri
- Çapraz Platform: macOS, Linux ve Windows'ta çalışır
- Çok Dilli: 17 dili destekler
🌏 Çok Dilli Destek Hakkında Bir Not
Azınlıkların varlığına değer veriyorum. Sadece sayıca az oldukları için onları bir kenara atmak istemiyorum. Çeviriler mükemmel olmasa bile, azınlık dillerini anlama ve saygı gösterme niyetimizi hissedeceğinizi umuyorum.
Bu eklenti, VS Code'un desteklediği 17 dilin tamamını destekler. Ayrıca README belgeleri için azınlık dillerine ve hatta şaka dillerine çeviri yapmaya kendimizi zorluyoruz.
Bu sadece "küresel destek" değil — "dilsel çeşitliliğe saygı"dır. Ve bu, dil engellerini aşarak dünyanın her yerinden geliştiricilerin dünyayı daha iyi yapan commitleri yaptığı bir altyapı haline gelirse mutlu olurum.
Hızlı Başlangıç
Kişisel hesap ve kurumsal hesap (Enterprise Managed User) yönetmek için tipik bir kurulum.
Adım 1: SSH Anahtarlarını Hazırlayın
Önce her hesap için SSH anahtarları oluşturun (zaten varsa atlayın):
# Kişisel
ssh-keygen -t ed25519 -C "deniz@personal.example.com" -f ~/.ssh/id_ed25519_personal
# İş
ssh-keygen -t ed25519 -C "deniz.yilmaz@techcorp.example.com" -f ~/.ssh/id_ed25519_work
Her anahtarın genel anahtarını (.pub dosyası) ilgili GitHub hesabına kaydedin.
Not: GitHub'a
id_ed25519_personal.pub(genel anahtar) kaydedilir.id_ed25519_personal(uzantısız) özel anahtardır — asla kimseyle paylaşmayın veya hiçbir yere yüklemeyin.
Adım 2: SSH'ı Yapılandırın
~/.ssh/config dosyasını düzenleyin:
# Kişisel GitHub hesabı (varsayılan)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# İş GitHub hesabı
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
Adım 3: Eklentiyi Yapılandırın
Kurulumdan hemen sonra örnek profiller hazır olarak gelir. Aşağıdaki kılavuzu izleyerek bunları kendi kullanımınıza göre düzenleyin.
Anahtar dosyası gönderilmez: SSH anahtar yolu ayarlandığında, sadece anahtar dosyasının yolu (konumu) kaydedilir. Anahtar dosyasının içeriği asla yüklenmez veya harici bir yere gönderilmez.
GPG imzalama kullanıyorsanız: Profil düzenleme ekranında
gpgKeyIdde ayarlayabilirsiniz. GPG anahtar ID'nizi bulmak için "Sorun Giderme" bölümüne bakın.
İpucu: Doğrudan settings.json'dan da yapılandırabilirsiniz. Eklenti ayarlarını açın (
Cmd+,/Ctrl+,) → "Git ID Switcher" arayın → "settings.json'da Düzenle"ye tıklayın. JSON formatında örnek için "Tam Örnek" bölümüne bakın.
Tam Örnek: 5 Hesap ve SSH + GPG
Her şeyi birleştiren tam bir örnek:
SSH Yapılandırması (~/.ssh/config)
# Kişisel hesap (varsayılan)
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# İş hesabı (şirket tarafından verilen Enterprise Managed User)
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
# Müşteri A – sözleşmeli iş (Bitbucket)
Host bitbucket-clienta
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_ed25519_clienta
IdentitiesOnly yes
# Müşteri B – yerinde proje (Bitbucket)
Host bitbucket-clientb
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_ed25519_clientb
IdentitiesOnly yes
# OSS katkıları (GitLab)
Host gitlab-oss
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_oss
IdentitiesOnly yes
Eklenti Ayarları
{
"gitIdSwitcher.identities": [
{
"id": "personal",
"name": "Deniz Yılmaz",
"email": "deniz@personal.example.com",
"service": "GitHub",
"icon": "🏠",
"description": "Kişisel projeler",
"sshKeyPath": "~/.ssh/id_ed25519_personal",
"sshHost": "github-personal",
"gpgKeyId": "ABCD1234EF567890"
},
{
"id": "work-main",
"name": "Deniz Yılmaz",
"email": "deniz.yilmaz@techcorp.example.com",
"service": "GitHub İş",
"icon": "💼",
"description": "TechCorp ana iş",
"sshKeyPath": "~/.ssh/id_ed25519_work",
"sshHost": "github-work",
"gpgKeyId": "9876543210FEDCBA"
},
{
"id": "client-a",
"name": "Deniz Yılmaz",
"email": "deniz@clienta.example.com",
"service": "Bitbucket",
"icon": "🏢",
"description": "ClientA sözleşme",
"sshKeyPath": "~/.ssh/id_ed25519_clienta",
"sshHost": "bitbucket-clienta"
},
{
"id": "client-b",
"name": "D.Yılmaz",
"email": "d.yilmaz@clientb.example.com",
"service": "Bitbucket",
"icon": "🏭",
"description": "ClientB yerinde",
"sshKeyPath": "~/.ssh/id_ed25519_clientb",
"sshHost": "bitbucket-clientb"
},
{
"id": "oss",
"name": "deniz-dev",
"email": "deniz.dev@example.com",
"service": "GitLab",
"icon": "🌟",
"description": "OSS katkıları",
"sshKeyPath": "~/.ssh/id_ed25519_oss",
"sshHost": "gitlab-oss"
}
],
"gitIdSwitcher.defaultIdentity": "personal",
"gitIdSwitcher.autoSwitchSshKey": true,
"gitIdSwitcher.applyToSubmodules": true
}
Not: 4. profil (client-b) kısaltılmış ad, 5. profil (oss) geliştirici takma adı kullanır. Aynı kişi için bile her profile farklı görünen ad ayarlayabilirsiniz.
Profil Yönetimi
Durum çubuğuna tıklayın → Listenin altındaki "Profil Yönetimi"ni seçerek yönetim ekranını açın. Profil ekleme, düzenleme, silme ve sıralama işlemlerinin tümü doğrudan UI'dan yapılabilir.
Profilleri silmek için Komut Paleti'nden Git ID Switcher: Delete Identity komutunu da kullanabilirsiniz.
Komutlar
| Komut | Açıklama |
|---|---|
Git ID Switcher: Select Identity | Profil seçiciyi aç |
Git ID Switcher: Delete Identity | Profil sil |
Git ID Switcher: Show Current Identity | Mevcut profil bilgisini göster |
Git ID Switcher: Show Documentation | Belgeleri göster |
Yapılandırma Referansı
Profil Özellikleri
| Özellik | Gerekli | Açıklama |
|---|---|---|
id | ✅ | Benzersiz tanımlayıcı (örn: "personal", "work") |
name | ✅ | Git user.name — commitlerde gösterilir |
email | ✅ | Git user.email — commitlerde gösterilir |
icon | Durum çubuğunda gösterilen emoji (örn: "🏠"). Sadece tek emoji | |
service | Hizmet adı (örn: "GitHub", "GitLab"). UI için | |
description | Seçici ve araç ipucunda gösterilen kısa açıklama | |
sshKeyPath | Özel SSH anahtarının yolu (örn: "~/.ssh/id_ed25519_work") | |
sshHost | SSH yapılandırma host takma adı (örn: "github-work") | |
gpgKeyId | Commit imzalamak için GPG anahtar ID'si |
Görüntüleme Sınırlamaları
- Durum çubuğu: ~25 karakterden uzun metinler
...ile kısaltılır icon: Sadece tek emoji (grapheme cluster) kullanılabilir. Birden fazla emoji veya uzun metin kullanılamaz
Genel Ayarlar
| Ayar | Varsayılan | Açıklama |
|---|---|---|
gitIdSwitcher.identities | Örneğe bak | Profil yapılandırmaları listesi |
gitIdSwitcher.defaultIdentity | Örneğe bak | Varsayılan profil ID'si |
gitIdSwitcher.autoSwitchSshKey | true | Profil değiştirildiğinde SSH anahtarını otomatik değiştir |
gitIdSwitcher.showNotifications | true | Profil değiştirildiğinde bildirim göster |
gitIdSwitcher.applyToSubmodules | true | Profili Git alt modüllerine uygula |
gitIdSwitcher.submoduleDepth | 1 | İç içe alt modüller için maks. derinlik (1-5) |
gitIdSwitcher.includeIconInGitConfig | false | Emoji ikonunu Git config user.name'e yaz |
gitIdSwitcher.syncCheck.enabled | true | Seçilen profilin gerçek git config ile eşleşip eşleşmediğini kontrol et |
gitIdSwitcher.syncCheck.onFocusReturn | true | Editör penceresi odağı geri aldığında senkronizasyon kontrolü çalıştır |
gitIdSwitcher.logging.fileEnabled | false | Denetim günlüğünü dosyaya kaydet (profil değişiklikleri, SSH işlemleri vb.) |
gitIdSwitcher.logging.filePath | "" | Günlük dosyası yolu (örn.: ~/.git-id-switcher/security.log). Boş = varsayılan konum |
gitIdSwitcher.logging.maxFileSize | 10485760 | Döndürmeden önce maks. dosya boyutu (bayt, 1MB-100MB) |
gitIdSwitcher.logging.maxFiles | 5 | Döndürülen günlük dosyası maks. sayısı (1-20) |
gitIdSwitcher.logging.redactAllSensitive | false | Etkinleştirildiğinde, günlüklerdeki tüm değerler maskelenir (maksimum gizlilik) |
gitIdSwitcher.logging.level | "INFO" | Günlük düzeyi (DEBUG, INFO, WARN, ERROR, SECURITY). Seçilen düzey ve üstünü kaydeder |
gitIdSwitcher.commandTimeouts | {} | Komut başına özel zaman aşımı (ms, 1sn-5dk). Örn.: {"git": 15000, "ssh-add": 10000} |
includeIconInGitConfig Hakkında
icon alanı ayarlandığında davranışı kontrol eder:
| Değer | Davranış |
|---|---|
false (varsayılan) | icon sadece editör UI'da gösterilir. Git config'e sadece name yazılır |
true | Git config'e icon + name yazılır. Emoji commit geçmişinde kalır |
Örnek: icon: "👤", name: "Deniz Yılmaz"
| includeIconInGitConfig | Git config user.name | Commit imzası |
|---|---|---|
false | Deniz Yılmaz | Deniz Yılmaz <email> |
true | 👤 Deniz Yılmaz | 👤 Deniz Yılmaz <email> |
Nasıl Çalışır
Git Config Katman Yapısı
Git yapılandırmasının üç katmanı vardır; alt katmanlar üst katmanlar tarafından geçersiz kılınır:
Sistem (/etc/gitconfig)
↓ geçersiz kılar
Global (~/.gitconfig)
↓ geçersiz kılar
Yerel (.git/config) ← en yüksek öncelik
Git ID Switcher --local (depo yerel) seviyesine yazar.
Bu şu anlama gelir:
- Profili her deponun
.git/configdosyasına kaydeder - Her depo için farklı profiller tutulabilir
- Global ayarlar (
~/.gitconfig) değiştirilmez
Profil Değiştirme Davranışı
Profil değiştirirken, eklenti şunları yapar (sırayla):
- Git Yapılandırması (her zaman):
git config --local user.nameveuser.email'i ayarlar - SSH Anahtarı (
sshKeyPathayarlanmışsa): Diğer anahtarları ssh-agent'tan kaldırır, seçileni ekler - GPG Anahtarı (
gpgKeyIdayarlanmışsa):git config --local user.signingkey'i ayarlar ve imzalamayı etkinleştirir - Alt Modüller (etkinse): Yapılandırmayı tüm alt modüllere yayar (varsayılan: derinlik 1)
- Senkronizasyon Kontrolü: Uygulanan profilin gerçek git config ile eşleştiğini doğrular
Senkronizasyon Kontrolü
Seçilen profili gerçek git config --local değerleriyle (user.name, user.email, user.signingkey) karşılaştırır ve uyumsuzluk tespit edildiğinde durum çubuğunda uyarı gösterir.
Kontroller ne zaman çalışır:
- Profil uygulandıktan hemen sonra
- Çalışma alanı klasörü değiştiğinde
- Yapılandırma değiştiğinde
- Editör penceresi odağı geri aldığında (debounce 500ms)
Uyumsuzluk tespit edildiğinde:
- Durum çubuğu uyarı arka plan rengiyle ⚠️ ikonu gösterir
- Araç ipucu uyumsuz alanları gösteren bir tablo görüntüler (alan, beklenen değer, gerçek değer)
- Durum çubuğuna tıklamak çözüm seçeneklerini gösterir:
- Profili yeniden uygula — Mevcut profili git config'e yeniden uygula
- Farklı profil seç — Profil seçiciyi aç
- Yoksay — Bir sonraki kontrole kadar uyarıyı gizle
Devre dışı bırakma:
Tüm senkronizasyon kontrollerini devre dışı bırakmak için gitIdSwitcher.syncCheck.enabled değerini false olarak ayarlayın.
Yalnızca odak dönüşü kontrolünü devre dışı bırakmak için gitIdSwitcher.syncCheck.onFocusReturn değerini false olarak ayarlayın.
Alt Modüllere Yayılım Mekanizması
Yerel yapılandırma depo seviyesinde çalıştığından, alt modüllere otomatik olarak uygulanmaz. Bu nedenle bu eklenti alt modüllere yayılım özelliği sağlar (detaylar için "Gelişmiş: Alt Modül Desteği"ne bakın).
SSH Anahtar Yönetimi Detayları
Git ID Switcher, SSH anahtarlarını ssh-agent aracılığıyla yönetir:
| İşlem | Çalıştırılan Komut |
|---|---|
| Anahtar ekle | ssh-add <keyPath> |
| Anahtar sil | ssh-add -d <keyPath> |
| Anahtar listele | ssh-add -l |
Önemli: Bu eklenti ~/.ssh/config'i değiştirmez. SSH yapılandırmasını manuel olarak ayarlamanız gerekir ("Hızlı Başlangıç" Adım 2'ye bakın).
Mevcut SSH Ayarlarıyla Etkileşim
Zaten SSH ayarlarınız varsa, Git ID Switcher şu şekilde davranır:
| Ayarlarınız | Git ID Switcher Davranışı |
|---|---|
~/.ssh/config'de IdentityFile belirtili | Her ikisi de kullanılabilir; IdentitiesOnly yes ile çakışma önlenir |
GIT_SSH_COMMAND ortam değişkeni ayarlı | Özel SSH komutu kullanılır; ssh-agent çalışmaya devam eder |
git config core.sshCommand ayarlı | Yukarıdakiyle aynı |
| direnv ile SSH ortam değişkenleri ayarlı | Birlikte çalışabilir; ssh-agent bağımsız çalışır |
Öneri: SSH config'de her zaman IdentitiesOnly yes ayarlayın. Bu, SSH'ın birden fazla anahtar denemesini önler.
Neden IdentitiesOnly yes?
Bu ayar olmadan, SSH şu sırayla anahtar deneyebilir:
- ssh-agent'a yüklenmiş anahtarlar (Git ID Switcher yönetir)
~/.ssh/config'de belirtilen anahtarlar- Varsayılan anahtarlar (
~/.ssh/id_rsa,~/.ssh/id_ed25519vb.)
Bu, kimlik doğrulama hatalarına veya istenmeyen anahtar kullanımına yol açabilir.
IdentitiesOnly yes ayarlandığında, SSH sadece belirtilen anahtarı kullanır. Bu, Git ID Switcher'da ayarlanan anahtarın kesinlikle kullanılmasını sağlar.
# Önerilen yapılandırma
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes # ← Bu satır önemli
Bu yapılandırmayla, github-work hostuna bağlanırken sadece ~/.ssh/id_ed25519_work kullanılır ve diğer anahtarlar denenmez.
Gelişmiş: Alt Modül Desteği
Git alt modülleri kullanan karmaşık depolar için profil yönetimi genellikle zahmetlidir. Bir alt modülde commit yaparsanız, Git o alt modülün yerel yapılandırmasını kullanır; açıkça ayarlanmamışsa global yapılandırmaya (yanlış e-posta!) geri dönebilir.
Git ID Switcher alt modülleri otomatik olarak algılar ve seçilen profili onlara uygular.
{
"gitIdSwitcher.applyToSubmodules": true,
"gitIdSwitcher.submoduleDepth": 1
}
applyToSubmodules: Bu özelliği etkinleştir/devre dışı bıraksubmoduleDepth: Ne kadar derine gidilsin?1: Sadece doğrudan alt modüller (en yaygın)2+: İç içe alt modüller (alt modüller içindeki alt modüller)
Bu, ana depoda veya vendor kütüphanesinde commit yapsanız da profilinizin her zaman doğru olmasını sağlar.
Sorun Giderme
SSH anahtarı değişmiyor mu?
-
ssh-agent'ın çalıştığından emin olun:eval "$(ssh-agent -s)" -
Anahtar yolunun doğru olduğunu kontrol edin:
ls -la ~/.ssh/id_ed25519_* -
macOS'ta Anahtar Zinciri'ne bir kez ekleyin:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_work
Push'ta yanlış profil mi?
Yeni klonlama:
İş depolarını klonlarken, SSH config'de ayarlanan host takma adını kullanın:
# İş için (github-work takma adını kullanır)
git clone git@github-work:company/repo.git
# Kişisel için (varsayılan github.com kullanır)
git clone git@github.com:yourname/repo.git
Mevcut depolar için:
-
Uzak URL'nin doğru host takma adını kullandığını kontrol edin:
git remote -v # İş depoları için git@github-work:... göstermeli -
Gerekirse güncelleyin:
git remote set-url origin git@github-work:company/repo.git
GPG imzalama çalışmıyor mu?
-
GPG anahtar ID'nizi bulun:
gpg --list-secret-keys --keyid-format SHORT -
İmzalamayı test edin:
echo "test" | gpg --clearsign -
Profilinizdeki e-postanın GPG anahtarının e-postasıyla eşleştiğinden emin olun
Profil algılanmadı mı?
- Bir Git deposunda olduğunuzdan emin olun
settings.json'da sözdizimi hatası olup olmadığını kontrol edin- VS Code penceresini yeniden yükleyin (
Cmd+Shift+P→ "Pencereyi Yeniden Yükle")
name alanında hata mı?
name alanında aşağıdaki karakterler bulunursa hata oluşur:
` $ ( ) { } | & < >
Hizmet adını eklemek istiyorsanız service alanını kullanın.
// YANLIŞ
"name": "Deniz Yılmaz (Kişisel)"
// DOĞRU
"name": "Deniz Yılmaz",
"service": "GitHub"
Yeni ayarlar görünmüyor mu?
Eklentiyi güncelledikten sonra bile yeni ayarlar ayarlar ekranında görünmeyebilir.
Çözüm: Makinenizi tamamen yeniden başlatın.
VS Code gibi editörler ayar şemasını bellekte önbelleğe alır ve "Pencereyi Yeniden Yükle" veya eklentiyi yeniden yüklemek yeterli olmayabilir.
Varsayılan değerler (identities vb.) boş mu?
Yeni kurulumda bile örnek ayarlar görünmüyorsa, Settings Sync nedeniyle olabilir.
Geçmişte boş ayarlar kaydettiyseniz, bu ayarlar buluta senkronize edilmiş ve yeni kurulumda varsayılan değerleri geçersiz kılmış olabilir.
Çözüm:
- Ayarlar ekranında ilgili ayar öğesini bulun
- Dişli simgesi → "Ayarı Sıfırla" seçin
- Settings Sync ile senkronize edin (eski ayarlar buluttan silinir)
Tasarım Felsefesi
"Ben kimim"i değiştirmek — Bu eklentinin yanıtladığı tek soru
Karesansui Mimarisi üzerine inşa edilmiştir. Çekirdek 100 satırda yazılabilecek kadar basittir. Bu sayede geriye kalan kısım kaliteye (90% test, günlükleme, zaman aşımları) ve bilinçli kısıtlamalara (GitHub API yok, token yönetimi yok) ayrılabilir.
Katkıda Bulunma
Katkılar memnuniyetle karşılanır! CONTRIBUTING.md'ye bakın.
Lisans
MIT Lisansı — LICENSE'a bakın.
Teşekkürler
Null;Variant tarafından oluşturuldu