Konfiguracja Gita pozwala na zautomatyzowanie kilku przydatnych rzeczy, tak aby nie trzeba było ich w kółko powtarzać. Warto być ich świadomym i warto korzystać, żeby nie powtarzać co jakiś czas tych samych czynności! 🙂
Cześć
Jest to pierwszy artykuł z kategorii Tips&Tricks i dziś dam Ci kilka wskazówek co do zarządzania konfiguracją Gita.
W dzisiejszym artykule:
Git Config
Aby zacząć z automatyzacją konfiguracji, najpierw trzeba zrozumieć czym jest sama konfiguracja i jakie są jej opcje.
Git udostępnia trzy poziomy konfiguracji:
systemowa - dla całej maszyny (<GIT_INSTALLATION_DIRECTORY>/etc/.gitconfig) globalna - dla użytkownika (~/.gitconfig) lokalna - dla repozytorium (.git/config)
Każdy kolejny poziom nadpisuje ustawienia z warstwy wyższej. Konfiguracje Gita to nic innego jak zwykłe pliki testowe a co za tym idzie można je edytować za pomocą ulubionego edytora. Nie jest to jednak najwygodniejsza opcja, dlatego git pozwala na użycie komend zarządzających konfiguracjami:
git config <klucz> <wartość> - ustawia konfigurację git config --unset <klucz> - czyści konfigurację git config <klucz> - wyświetla konfigurację git config --list - wyświetla całą konfigurację
Konfiguracja Globalna
Jeżeli chcesz bawić się konfiguracją na poziomie innym niż lokalny wystarczy dodać dodatkowy przełącznik –global w przypadku konfiguracji globalnej lub –system w przypadku systemowej.
git config --global user.name test
Polecenie powyżej ustawi user.name na test w konfiguracji globalnej. Domyślnie, bez podania żadnego przełącznika, config ustawiany jest na poziomie lokalnym. Konfiguracji systemowej nie zalecam edytować i zmieniać – niech działa domyślnie, prawdopodobnie pozwoli Ci to uniknąć problemów jeżeli nie czujesz się jeszcze bezpiecznie w tematach konfiguracji 🙂
A czym jest konfiguracja globalna?
Myślę, że najprościej będzie to wyjaśnić na przykładzie. Konfigurujesz nowy projekt (robisz git init lub git clone), chcesz coś pushnąć na repozytorium a user.name i user.email nie są ustawione, dostajesz taki komunikat:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
Sam Git podpowiada aby ustawić te konfiguracje globalnie. Dlaczego? Bo ustawiając je globalnie, każdy kolejny projekt będzie dziedziczyć ustawienia globalne. Zgodnie z regułą nadpisywania ustawień – dopiero ustawienie nowych konfiguracji na poziomie lokalnym mogą nadpisać poziom globalny. A zatem, jeżeli nie ustawimy konfiguracji na poziomie lokalnym to będą one pobierane z warstwy wyżej, tzn. globalnej.
Automatyzacja!
Problem z dziedziczeniem konfiguracji jest taki, że musimy pamiętać o nadpisywaniu ustawień (np. email) na poziomie lokalnym jeżeli używamy innych adresów do projektów służbowych i prywatnych. Baa… a co jeżeli w pracy jesteśmy na kilku projektach, które wymagają podania oddzielnych adresów email? Sam mam ustawione 2 emaile służbowe i 1 prywatny.
Z pomocą przychodzi Konfiguracja Warunkowa i Współdzielona!
Konfiguracja Współdzielona – jest to nic innego jak osobny plik zawierający jakiś kawałek konfiguracji. Tworzymy go w prosty sposób:
git config --file .gitconfig.work user.email praca@work.com
Równie dobrze możesz utworzyć taki plik ręcznie. Pamiętaj – konfiguracja to tylko pliki tekstowe 🙂
Konfiguracja Warunkowa – tak jak sama nazwa wskazuje – WARUNKOWA. Jaki warunek będzie najlepszy? Biorąc pod uwagę, że zazwyczaj nasze projekty mają swoje miejsce w pewnych folderach, podział projektów na katalogi będzie najlepszy. Wystarczy trzymać się zasady: projekty prywatne (jeden email) idą do tego folderu, projekty służbowe (inny email) do innego. Konfigurację warunkową ustawiamy na poziomie globalnym!
Przykład zautomatyzowanej konfiguracji:
Na co dzień używasz jednego głównego maila: ogolny@example.com, natomiast w celach służbowych innego: praca@work.com. Mail główny jest używany w wiekszości projektów, więc śmiało możesz go ustawić na poziomie globalnym bez żadnych warunków – po prostu będzie to adres wybierany domyślnie. Natomiast mail służbowy ma być używany tylko dla specyficznych projektów.
- Ustalamy katalog z projektami służbowymi (np. ~/praca/)
- Tworzymy nowy config (w moim przypadku w katalogu użytkownika ~/)
git config --file ~/.gitconfig.work user.email praca@work.com
- Dodajemy warunek wykorzystania nowej konfiguracji, gdy projekty znajdują się w katalogu ~/praca/
git config --global includeif.gitdir:~/praca/.path .gitconfig.work
I tyle. Od teraz nie musisz pamiętać o ustawianiu innych adresów email (lub innych konfiguracji specyficznych dla danego projektu) oddzielnie. Masz jedną, globalną konfigurację. Poświęciłeś 10 minut na konfigurację i nie musisz się nią przejmować przez długi czas! 🙂
A tutaj screen, jakby to mogło wyglądać, gdybyś chciał skonfigurować dwie różne konfiguracje. Pamiętaj, że nie ma ograniczeń – jeżeli potrzebujesz więcej różnych ustawień, możesz to śmiało robić. Jednak ja ze swojego doświadczenia dam Ci wskazówkę, żeby nie używać więcej niż 3 dodatkowych plików konfiguracyjnych. W przeciwnym razie będzie Ci się ciężko połapać.
Podsumowanie
Konfiguracja Gita to prosty mechanizm. Wiele osób mimo wszystko go nie rozumie – moim zdaniem ponieważ go zlekceważyli. Warto korzystać z ułatwień jakie dają nam narzędzia – dzięki temu zwiększa się nasza produktywność i jakby nie patrzeć – wiedza!
Korzystasz z różnych adresów email (a być może i user.name) na jednym komputerze? Moim zdaniem nie ma co zwlekać – dodaj konfigurację warunkową i ułatw sobie życie. Ustrukturyzuj katalogi i ogień 🔥🔥!
Źródła:
Polecam dodanie sobie globalnego gitignore:
git config –global core.excludesFile '~/.gitignore’
Dzięki temu można się szybko pozbyć np. plików .DS_Store na macOS, czy plików .swp od VIM’a
Good stuff!