Dwa konta GitHub, jeden komputer · krok 1 z 6
Jak to działa
Zasada działania: includeIf w gitconfigu + osobny klucz SSH per katalog.
Problem
Masz dwa konta GitHub (user1, user2) i dwa katalogi projektów na jednym komputerze, np.:
D:\Projekty\user1\
D:\Projekty\user2\
Litera dysku (
D:,G:,C:…) nie ma znaczenia — to tylko przykład. Cały mechanizm opiera się na ścieżce do katalogu, nie na konkretnym dysku. Użyj swojej własnej litery i struktury folderów, konsekwentnie podstawiając ją w dalszych krokach.
Chcesz, żeby git push z katalogu user1 zawsze szedł na konto user1, a z katalogu user2 — na user2, bez ręcznego przelogowywania się w przeglądarce czy w edytorze.
Dlaczego samo .gitconfig to za mało
.gitconfig z includeIf ustawia tylko tożsamość commitów (user.name, user.email) — czyli kto widnieje jako autor. Nie ustawia danych logowania używanych przy pushu. Jeśli logujesz się przez HTTPS (np. przez rozszerzenie GitHub w VS Code), Git i tak użyje jednego zapisanego tokena OAuth — niezależnie od tego, jaki user.email masz w configu.
Rozwiązanie: SSH + osobny klucz per katalog
Zamiast HTTPS używamy SSH. Każde konto GitHub dostaje własną parę kluczy SSH, a Git — na podstawie katalogu, w którym pracujesz — sam wybiera odpowiedni klucz przy każdym połączeniu z GitHubem.
Mechanizm składa się z trzech warstw:
includeIf "gitdir:..."w głównym~/.gitconfig— mówi Gitowi “jeśli pracujesz w tym katalogu, doczytaj też ten dodatkowy plik configu”.- Osobny plik configu na konto (
.gitconfig-user1,.gitconfig-user2) — ustawiauser.name,user.emailorazcore.sshCommandwskazujący na konkretny klucz SSH. - Remote repozytorium w formacie SSH (
git@github.com:user/repo.git) — żeby Git w ogóle używał SSH, a nie HTTPS.
Efekt: wchodzisz do katalogu, robisz git push, a Git po cichu bierze właściwy klucz i właściwą tożsamość — automatycznie.
Kolejne strony pokazują to krok po kroku dla Windows, macOS i Linuksa. Kroki 1–2 (generowanie kluczy, konfiguracja gitconfig) są takie same na każdym systemie — różni się tylko lokalizacja plików i sposób uruchamiania agenta SSH.