MatrixDev
Published on

Kolejne narzędzie, bez którego nie można się obejść – Git

Authors

Kolejne narzędzie, bez którego nie można się obejść – Git

Każdy programista, niezależnie od poziomu zaawansowania, w pewnym momencie musi zarządzać kodem w sposób, który zapobiega utracie pracy, umożliwia powrót do poprzednich wersji i ułatwia współpracę z innymi. Tutaj z pomocą przychodzi Git – rozproszony system kontroli wersji.

Czym jest Git i dlaczego jest tak ważny?

Git to nie tylko narzędzie, to filozofia pracy z kodem. Wyobraź sobie, że piszesz projekt i nagle zdajesz sobie sprawę, że ostatnie zmiany zepsuły coś, co wcześniej działało. Bez systemu kontroli wersji powrót do działającego stanu może być koszmarem. Git rozwiązuje ten problem, śledząc każdą zmianę wprowadzoną w plikach projektu.

Dlaczego jest to tak ważne?

  • Bezpieczeństwo pracy: Nigdy więcej nie stracisz swojej pracy. Git pozwala tworzyć „migawki” projektu w dowolnym momencie, dzięki czemu zawsze możesz wrócić do wcześniejszej, stabilnej wersji.
  • Współpraca: Pracujesz w zespole? Git umożliwia jednoczesną pracę wielu osób nad tym samym projektem, bez nadpisywania zmian. Pomaga też w łączeniu (merge) zmian od różnych deweloperów, wskazując ewentualne konflikty.
  • Nieliniowa historia zmian: Możliwość tworzenia gałęzi (branches) to jedna z najpotężniejszych cech Gita. Dzięki nim możesz eksperymentować z nowymi funkcjami, poprawkami błędów czy optymalizacjami, nie wpływając na główną, stabilną wersję projektu. Gdy zmiany są gotowe, łatwo włączysz je do głównej gałęzi. Ta nieliniowa historia zapewnia swobodę i elastyczność w rozwoju projektu.
  • Audyt zmian: Zawsze wiesz, kto, kiedy i jakie zmiany wprowadził. To nieocenione przy debugowaniu i śledzeniu ewolucji projektu.

Nie tylko Git – czyli co z moim ulubionym Neovimem?

Ten wpis skupia się na podstawach Gita, ale nie mogę pominąć tego, jak narzędzia kontroli wersji współgrają z moim ulubionym edytorem – Neovimem. W kolejnych postach omówimy narzędzia Gita dedykowane dla Neovima, ale dziś zatrzymam się przy pluginie, który znacząco ułatwia życie, zwłaszcza w zarządzaniu zmianami, nawet jeśli nie są one bezpośrednio związane z Gitem.

Mowa o Undo Tree. Git oferuje potężne możliwości cofania zmian na poziomie całego repozytorium, ale Undo Tree dostarcza graficzną, interaktywną wizualizację historii zmian w pojedynczym pliku.

Instalacja Undo Tree z Lazy

Aby zainstalować Undo Tree w Neovimie przy użyciu menedżera wtyczek Lazy, dodaj poniższy wpis do konfiguracji:

{
  "mbbill/undotree",
  keys = {
    { "<leader>uu", "<cmd>UndotreeToggle<CR>", desc = "Toggle UndoTree" }
  }
}

Ten kod instaluje plugin i ustawia skrót <leader>uu, który włącza lub wyłącza okno Undo Tree.

Główne cechy Undo Tree

Drzewo historii zmian

  • Każda zmiana w pliku tworzy nową „gałąź” w drzewie. W standardowym Vimie, gdy cofniesz zmianę i wprowadzisz nową, wcześniejsza gałąź jest tracona. Undo Tree zachowuje wszystkie gałęzie, umożliwiając przełączanie się między różnymi stanami pliku, nawet tymi „alternatywnymi”.
  • Możesz eksplorować różne wersje pliku, które istniały w przeszłości, bez obawy o utratę historii.

Wizualizacja drzewa

  • Plugin otwiera okno podglądu (zazwyczaj po lewej stronie), które graficznie przedstawia drzewo zmian.
  • Wizualizacja jasno pokazuje, gdzie jesteś w drzewie, które zmiany są „rodzicami” (wcześniejsze stany), a które „dziećmi” (kolejne wersje).

Trwałość historii (Persistent Undo)

  • Undo Tree wykorzystuje funkcję Vima „persistent undo” (jeśli włączona), zapisując historię zmian na dysku. Dzięki temu po ponownym otwarciu pliku cała historia edycji jest dostępna.

Łatwa nawigacja

  • Dedykowane mapowania klawiszy (domyślne lub konfigurowalne) umożliwiają:
    • Przechodzenie do starszych lub nowszych stanów pliku.
    • Eksplorację „rodziców” (poprzednich stanów) i „dzieci” (kolejnych wersji).
    • Szybkie przełączanie się między gałęziami w oknie drzewa.

Podgląd różnic (Diff Preview)

  • Po wybraniu węzła w drzewie Undo Tree może wyświetlić różnice między aktualnym stanem pliku a wybranym stanem. To ułatwia zrozumienie, co dokładnie zmieniło się w danym punkcie historii.

Undo Tree to idealne uzupełnienie Gita, szczególnie gdy chcesz szybko zarządzać lokalnymi zmianami w pojedynczym plik.To jak „historia cofania” na sterydach. Możesz przeglądać i wracać do dowolnego stanu pliku, nawet po ponownym otwarciu Neovima. To niezwykle przydatne przy eksperymentowaniu z kodem, testowaniu pomysłów czy szybkim powrocie do poprzednich wersji bez angażowania całego repozytorium Gita. Undo Tree świetnie uzupełnia pracę z Gitem. Wracajac do głównego tematu.

Kolejne narzędzie, bez którego nie można się obejść – Git

1. Instalacja Gita

Windows

  1. Pobierz oficjalny instalator z git-scm.com. Można tez zrobic to za pomoca narzedzia winget w pwsh. winget install --id Git.Git -e --source winget
  2. Uruchom instalator, zachowując domyślne opcje (w tym Git Bash).

Linux

Dla linuxa pobierz uwywajac twojego menadżera pakietów w zależności od distro:

# Debian/Ubuntu
sudo apt install git 
# Fedora
sudo dnf install git
# Arch
sudo pacman -S git
# Sprawdzamy czy działa 
git --version

Jeżeli mamy problem z uruchomieniem gita dodajemy do zminnej środowiskowej lokalizacje naszego folderu z gitem.

2. Podstawowa konfiguracja

Jeżeli niemasz konta na github to warto je założyc - albo innej podobnej platformie. Przed pierwszym commitem skonfiguruj swoje dane:

git config --global user.name "Twoja Nazwa"
git config --global user.email "twoj@email.com"
git config --global core.editor "code --wait"  # VS Code jako edytor

Sprawdź konfigurację:

git config --list

3. Tworzenie repozytorium

Opcja A: Nowe repozytorium (lokalne)

mkdir moj_projekt
cd moj_projekt
git init  # Inicjalizuje puste repozytorium

Opcja B: Klonowanie istniejącego repozytorium (np. z GitHub)

git clone https://github.com/user/repo.git
cd repo

4. Dodawanie plików i pierwszy commit

# 1. Utwórz plik (np. README.md)
echo "# Mój Projekt" > README.md

# 2. Sprawdź status zmian
git status

# 3. Dodaj pliki do "staging area"
git add README.md
# Lub wszystkie zmienione pliki:
git add .

# 4. Zrób pierwszego commita
git commit -m "Pierwszy commit: dodano README"

# 5. Sprawdź historię
git log --oneline

5. Podstawowy workflow Gita

KomendaOpisPrzykład
git addDodaje zmiany do indexugit add plik.txt
git commitZapisuje zmiany w repozytoriumgit commit -m "opis"
git statusPokazuje nieśledzone/zmienione plikigit status
git logWyświetla historię commitówgit log --graph
git diffPokazuje niezapisane zmianygit diff

6. Łączenie z GitHubem

  1. Stwórz nowe repozytorium na GitHubie (bez plików .gitignore ani README.md).
  2. Podłącz lokalne repozytorium do zdalnego:
git remote add origin https://github.com/user/repo.git
git branch -M main
git push -u origin main

7. Ignowowanie Plików (.gitignore)

Dzięki .gitignore możesz wykluczyć niepotrzebne pliki (np. node_modules) z repozytorium.

echo "node_modules/" > .gitignore

git add .gitignore
git commit -m "Dodano .gitignore"