/ WPROWADZENIE

Podstawy konfiguracji Gita - przydatna wiedza w celu dostosowywania środowisk

Mechanizm konfiguracji Gita jest bardzo prosty i warto go poznać, żeby potrafić usprawniać sobie środowiska pracy.

Poziomy konfiguracji Gita

Git posiada trzy poziomy konfiguracji:

System

Najwyższy poziom konfiguracji - System jest widoczny dla wszystkich użytkowników komputera (i wszyscy z niego korzystają). Jest to plik tekstowy gitconfig znajdujący się w globalnej lokalizacji np. /etc/gitconfig lub dla Windowsa %ProgramFiles(x86)%\Git\etc\gitconfig (ścieżki mogą się różnić w zależności od instalacji, np. znam również wersję %ProgramFiles%\Git\mingw64\etc\gitconfig).

Global

Najczęściej modyfikowany poziom konfiguracji - global jest globalny w obrębie zalogowanego użytkownika. Jest to plik tekstowy .gitconfig znajdujący się w katalogu użytkownika - ~/.gitconfig, a w przypadku Windowsa - %USERPROFILE%/.gitconfig.

Local

Najniższy poziom konfiguracji - local to plik tekstowy config, znajdujący się bezpośrednio w konkretnym repozytorium - dotyczy więc tylko danego repozytorium.

Jak Git korzysta z poziomów konfiguracji

W skrócie można powiedzieć, że poziom system jest nadpisywany przez poziom global, a poziom global jest nadpisywany przez poziom local. Czyli jeżeli np. dane ustawienie widnieje tylko w najwyższym poziomie, to Git je odczyta, ale jeżeli istnieje zarówno na poziomie system i global - to weźmie wersję z global. Jeżeli np. dane ustawienie widnieje w poziomie local, wówczas ta wartość jest brana pod uwagę, bez względu na to, czy poziom global lub system też je określa.

Odczytywanie i modyfikowanie konfiguracji

W celu ustawienia wartości dla danego ustawienia wpisujemy komendę:
git config --POZIOM SEKCJA.NAZWA "TREŚĆ" - np.
git config --global user.name "John Doe".
Jeżeli nie wskażemy poziomu explicite, to zmiany zostaną zapisane w poziomie local.

Druga opcja, żeby zmodyfikować ustawienia, to zwyczajna edycja pliku tekstowego ustawień wybranego poziomu. Możemy to zrobić odszukując plik w wybranej ścieżce na dysku lub wywołać edytor tekstowy za pomocą polecenia:
git config --POZIOM --edit - np.
git config --global -e
Tym samym sposobem możemy również podejrzeć, jakie mamy ustawienia na danym poziomie.

Odczytać wartości możemy również za pomocą polecenia:
git config --POZIOM --list - np.
git config --list

Trzeci sposób na odczytanie wartości to sprawdzenie konkretnego wpisu poleceniem:
git config (--POZIOM) SEKCJA.NAZWA - np.
git config --get user.email

Jak w praktyce wykorzystuje się poziomy konfiguracji Gita

W praktyce nigdy nie modyfikowałem poziomu system, a wszelkie ustawienia, które tam miałem, zostały wrzucone przez zainstalowane programy.

Poziom global to chleb powszedni, zazwyczaj to, co ustawiamy, chcemy ustawić dla siebie raz i już tego nie zmieniać. W praktyce więc zmieniając ustawienia, zazwyczaj z odruchu będziesz dopisywał poziom global.

Poziom local przydaje się wtedy, kiedy dane repozytorium jest pod jakimś kątem specyficzne, względem Twoich pozostałych repozytoriów na danym komputerze.

Dla przykładu na komputerze służbowym mam na poziomie global ustawione swoje prawdziwe imię i nazwisko oraz służbowego maila - taka jest polityka firmy. Czasami zdarza się jednak, że na służbowym laptopie dłubię coś w prywatnych projektach, w których posługuję się swoim prywatnym mailem i nickiem, zamiast imienia i nazwiska - wówczas na służbowym laptopie ustawiam prywatne dane, ale tylko w kontekście tych konkretnych repozytoriów.

Może się też zdarzyć tak, że Twoje ulubione narzędzie do diffowania/mergowania w kontekście jakiegoś projektu będzie miało lepszą alternatywę. Przykładowo możesz ogólnie używać do oglądania różnic programu Kdiff3, ale w kontekście projektu C# woleć DiffToola dostarczanego rezem z programem Rider, który koloruje Ci składnię i wyszarza nieużywany kod. Sam osobiście preferuję Kdiff3 do każdego projektu, a fajerwerki od JetBrainsów w tym konkretnym przypadku według mnie zaciemniają sprawę, ale są ludzie, którzy je wolą.

Zdarza się, że ktoś nie wiedząc o tym konfiguracji stosowanym przez Gita, męczy się z ogólnym ustawieniem, którego nie chce zmienić, zamiast po prostu dostosować sobie konfigurację na poziomie danego repozytorium, dlatego polecam każdemu zapoznać się z Gitową filozofią konfiguracji. Nie trzeba wkuwać na pamięć ścieżek ani komend, wystarczy rozumieć, jak to działa, a w danym przypadku konkretną komendę czy ścieżkę zawsze można łatwo wyszukać w internecie.

Przygotowanie Gita

Na początek, żeby wydajnie korzystać z Gita, wystarczy kilka prostych kroków.

Instalacja

Niezbędne oprogramowanie to

  • Git
  • gitk (narzędzie ułatwiające przeglądanie historii)
    • Linuks - sudo apt-get install gitk
    • Windows - jest preinstalowany razem z Gitem
    • MacOS - jest preinstalowany razem z Gitem
  • KDiff3 (posłuży jako DiffTool oraz MergeTool)

Konfiguracja

Twoje dane:

git config --global user.name "Twoje imię i nazwisko lub nick"
git config --global user.email "twoj@email"

Edytor tekstowy - bardzo ważne, żeby ustawić lekki edytor tekstowy, ponieważ korzystając z Gita, będzie on często otwierany, jeżeli więc będzie się długo uruchamiał, to wybije Cię z flow pracy. Jeżeli potrafisz obsługiwać konsolowy edytor np. Vim lub Nano, prawdopodobnie będzie to najlepszy wybór - w ogóle nie będziesz musiał opuszczać konsoli:

  • Linux Mint - Xed: git config --global core.editor xed
  • Ubuntu - Gedit: git config --global core.editor gedit
  • Windows - Notepad: git config --global core.editor notepad
  • Any OS - Vim: git config --global core.editor vim

DiffTool oraz MergeTool - przeglądanie wprowadzonych zmian i rozwiązywanie konfliktów w kodzie jest codziennością. Chociaż da się obejść bez dedykowanego narzędzia, to potrafi ono oszczędzić dużo czasu. Razem z drugim prowadzącym GitWarsztaty - Krzyśkiem Morcinkiem, polecamy KDiff3, zarówno jako diff jak i merge tool. Jest prosty, ale właśnie w tej prostocie tkwi jego siła - wolę kdiffa zdecydowanie bardziej, niż rozbudowane narzędzia, kolorujące składnię, analizujące kod itp. - taka postać jest dla mnie czystsza, a co za tym idzie - czytelniejsza. Świetnie nadaje się do każdego typu plików tekstowych, niezależnie od języka programowania, czy nawet nie programowania - dla przykładu tekst, który właśnie czytasz, piszę w formacie markdown i przechowuję w repozytorium Gita - Kdiff3 i w tym przypadku się świetnie sprawdza.

Otwieramy plik .gitconfig w edytorze tekstowym, za pomocą polecenia:
git config --global -e
i ustawiamy następujące wartości (uwaga, żeby nie duplikować sekcji, jeżeli już istnieją):

Linux i MacOS:

[merge]
tool = kdiff3

[diff]
guitool = kdiff3

Windows (jeżeli KDiff3 został zainstalowany pod inną ścieżką, należy ją dostosować):

[merge]
tool = kdiff3

[mergetool "kdiff3"]
path = c:/Program Files/KDiff3/kdiff3.exe

[diff]
tool = kdiff3
guitool = kdiff3

[difftool "kdiff3"]
path = c:/Program Files/KDiff3/kdiff3.exe

Podsumowanie

Jak widzisz, filozofia konfiguracji Gita jest bardzo prosta - opiera się o trzy, proste pliki tekstowe, a jednocześnie bardzo elastyczna - łatwo dopasować Gita do naszej sytuacji.

Podstawowy setup środowiska zajmuje kilka minut i składa się z zainstalowania 3 programów: Git, gitk oraz KDiff3, oraz skonfigurowaniu imienia i nazwiska, maila, edytora tekstowego i diff/merge toola.

Jeżeli chcesz szerzej poznać ten i inne mechanizmy Gita, a zamiast wysłuchiwać jedynie suchej teorii, spróbować wszystkiego w praktyce, zapraszamy na GitWarsztaty, na których z pomocą trenerów przećwiczysz najważniejsze funkcje Gita.