Git, stworzony przez Linusa Torvaldsa w 2005 roku, zrewolucjonizował sposób, w jaki programiści pracują nad kodem źródłowym. Dzięki swojej wydajności, elastyczności i rozproszonej naturze, Git stał się standardem w zarządzaniu wersjami kodu. W tej sekcji przybliżymy podstawowe informacje o Git, w tym krótką historię jego powstania, przyczyny popularności oraz kluczowe pojęcia niezbędne do zrozumienia jego działania.
Krótki przegląd historii Git-a
Git został stworzony w odpowiedzi na potrzebę wolnego i otwartego oprogramowania do zarządzania wersjami kodu źródłowego jądra Linuxa. Jego głównymi założeniami była prędkość, prostota projektu, wsparcie dla rozproszonych systemów, możliwość efektywnego zarządzania dużymi projektami, a także gwarancja integralności danych. Szybko zdobył popularność nie tylko wśród programistów jądra Linuxa, ale również w szerszej społeczności deweloperów, stając się de facto standardem w zarządzaniu wersjami.
Dlaczego Git jest tak popularny?
Git oferuje szereg zalet, które przyczyniły się do jego popularności:
- Elastyczność i skalowalność: Git świetnie sprawdza się zarówno w małych, jak i dużych projektach, oferując szybką i efektywną obsługę.
- Rozproszony system: Każdy kto pracuje z Gitem, posiada lokalną kopię całego repozytorium, co umożliwia pracę offline i zwiększa bezpieczeństwo.
- Branżowanie i łączenie: Git oferuje zaawansowane możliwości tworzenia oraz zarządzania gałęziami, co ułatwia równoległe rozwijanie różnych funkcji i łatwe łączenie zmian.
- Odzyskiwanie i cofanie zmian: Git zapewnia szerokie możliwości odzyskiwania utraconych danych i cofania zmian, co jest kluczowe dla bezpieczeństwa i stabilności projektu.
- Współpraca: Git ułatwia współpracę w zespołach rozproszonych, oferując łatwe sposoby na integrację zmian wprowadzanych przez różnych deweloperów.
Podstawowe pojęcia związane z Git-em
Zanim zagłębimy się w konkrety dotyczące komend i technik pracy z Gitem, warto zrozumieć kilka kluczowych pojęć:
- Repozytorium: Jest to miejsce, gdzie Git przechowuje wszystkie pliki projektu oraz informacje o ich historii. Może być lokalne (na komputerze użytkownika) lub zdalne (na serwerze).
- Commit: Reprezentuje zapisany stan plików w repozytorium w danym momencie. Każdy commit zawiera informacje o autorze zmian, dacie i komentarzu opisującym zmianę.
- Gałąź (Branch): To lekka, edytowalna kopia kodu źródłowego, która pozwala na równoległe rozwijanie różnych funkcji lub eksperymentowanie, bez wpływu na główną linię projektu.
- Merge: Proces łączenia zmian z różnych gałęzi w jedną linię, co pozwala na integrację rozwijanych funkcji do głównego projektu.
- Pull & Push: Polecenia służące do aktualizacji zdalnego repozytorium. Pull pobiera zmiany z repozytorium zdalnego do lokalnego, a Push wysyła zmiany z lokalnego repozytorium do zdalnego.
Zrozumienie tych pojęć jest kluczowe do efektywnej pracy z Gitem. W kolejnych rozdziałach przyjrzymy się bardziej szczegółowo, jak można wykorzystać Git do zarządzania kodem źródłowym, efektywnej pracy zespołowej oraz do zabezpieczania projektu przed niepożądanymi zmianami.
Instalacja i konfiguracja Git-a
Aby móc w pełni wykorzystać możliwości Git-a, pierwszym krokiem jest jego prawidłowa instalacja oraz konfiguracja na naszym komputerze. Ten rozdział przeprowadzi Cię przez proces instalacji Git-a na różnych systemach operacyjnych, podstawową konfigurację niezbędną do rozpoczęcia pracy, a także przez proces tworzenia Twojego pierwszego repozytorium Git.
Jak zainstalować Git-a na różnych systemach operacyjnych
Windows
- Pobieranie: Aby zainstalować Git-a na Windowsie, odwiedź oficjalną stronę Git git-scm.com i pobierz najnowszą wersję dla Windowsa.
- Instalacja: Uruchom pobrany plik instalacyjny i postępuj zgodnie z instrukcjami kreatora instalacji. Domyślne opcje instalacji są zazwyczaj odpowiednie dla większości użytkowników.
- Weryfikacja: Aby sprawdzić, czy instalacja przebiegła pomyślnie, otwórz wiersz poleceń (cmd) lub PowerShell i wpisz
git --version
. Jeśli instalacja się powiodła, zobaczysz numer zainstalowanej wersji Git-a.
macOS
- Pobieranie: Git jest często już zainstalowany na macOS, ale aby uzyskać najnowszą wersję, najlepiej zainstalować go za pomocą menedżera pakietów, takiego jak Homebrew. Jeśli jeszcze go nie masz, zainstaluj Homebrew z ich oficjalnej strony.
- Instalacja: Otwórz Terminal i wpisz
brew install git
aby zainstalować Git-a. - Weryfikacja: Wpisz
git --version
w Terminalu, aby sprawdzić, czy Git został poprawnie zainstalowany.
Linux
- Pobieranie i Instalacja: Większość dystrybucji Linuxa ma Git-a dostępnego w swoich repozytoriach. Możesz go zainstalować za pomocą menedżera pakietów swojej dystrybucji. Na przykład, w dystrybucjach opartych na Debianie (takich jak Ubuntu), użyj polecenia
sudo apt-get install git
. Dla dystrybucji opartych na Red Hat użyjsudo yum install git
. - Weryfikacja: Podobnie jak w innych systemach, użyj polecenia
git --version
w terminalu, aby sprawdzić, czy Git został zainstalowany.
Podstawowa konfiguracja Git-a
Po zainstalowaniu Git-a, ważne jest, aby skonfigurować kilka podstawowych ustawień, które będą stosowane do wszystkich Twoich projektów. Obejmuje to ustawienie Twojego imienia, nazwiska oraz adresu e-mail, które będą wykorzystywane przy każdym zatwierdzaniu zmian (commit):
git config --global user.name "Twoje Imię i Nazwisko"
git config --global user.email "twój.email@example.com"
Dodatkowo, możesz chcieć ustawić edytor tekstu, który będzie używany do edycji komunikatów commitów:
git config --global core.editor nazwa_edytora
Dla przykładu, aby ustawić Vim jako edytor, wpisz git config --global core.editor vim
.
Tworzenie pierwszego repozytorium
Z konfiguracją Git-a za nami, czas utworzyć pierwsze repozytorium. Możesz to zrobić na dwa sposoby: inicjalizując nowe repozytorium w istniejącym katalogu, lub klonując istniejące repozytorium z serwera.
Inicjalizacja nowego repozytorium
- Otwórz terminal i przejdź do katalogu, w którym chcesz utworzyć repozytorium.
- Wpisz
git init
. Spowoduje to utworzenie nowego, pustego repozytorium Git w tym katalogu.
Klonowanie istniejącego repozytorium
Jeśli chcesz pracować z istniejącym projektem, możesz sklonować jego repozytorium:
git clone url_do_repozytorium
Zamień url_do_repozytorium
na adres URL repozytorium, które chcesz sklonować. Na przykład:
cd ścieżka/do/twojego/projektu
git init
git clone
– Klonowanie istniejącego repozytorium
Jeśli chcesz pracować nad istniejącym projektem, możesz użyć komendy git clone
, aby skopiować całe repozytorium, włącznie z całą jego historią zmian, na swój komputer.
git clone url_repozytorium
Po wykonaniu tej komendy zostanie utworzony katalog z nazwą projektu, zawierający wszystkie pliki projektu oraz ukryty katalog .git
, w którym przechowywane są dane repozytorium.
git add
– Dodawanie zmian do repozytorium
Aby dodać zmiany w plikach do repozytorium (czyli zaplanować je do commita), użyj komendy git add
. Możesz dodać pojedynczy plik, kilka plików lub wszystkie zmienione pliki naraz.
git add nazwa_pliku
Aby dodać wszystkie zmiany w projektu, użyj:
git add .
git commit
– Zatwierdzanie zmian w repozytorium
Po dodaniu zmian za pomocą git add
, następnym krokiem jest ich zatwierdzenie przy pomocy komendy git commit
. Każdy commit powinien być opatrzony komentarzem, który krótko opisuje wykonane zmiany.
git status
Wykorzystując git status
, możesz łatwo zidentyfikować nowe, zmodyfikowane lub usunięte pliki, które jeszcze nie zostały dodane do indeksu Git-a lub zatwierdzone w repozytorium.
git diff
– Porównywanie zmian
Aby dokładnie przeanalizować, co zmieniło się w plikach między commitami, przed zatwierdzeniem zmian, a także po zatwierdzeniu, można użyć komendy git diff
. Daje ona wgląd w konkretne linie, które zostały dodane lub usunięte.
git diff
Powyższe polecenie pokaże różnice między ostatnim commit-em a zmianami, które nie zostały jeszcze zaplanowane do commita. Aby zobaczyć różnice w zmianach zaplanowanych do commita, użyj:
git diff --cached
git log
– Przeglądanie historii zmian
Historia commitów jest fundamentalnym elementem każdego repozytorium Git. Dzięki git log
możesz przeglądać historię zmian, co umożliwia śledzenie postępów prac nad projektem, a także analizę i odnajdywanie konkretnych zmian.
git log
Domyślnie, git log
wyświetli listę commitów w odwrotnej kolejności chronologicznej (najnowsze na górze) wraz z informacjami takimi jak identyfikator commita (SHA), autor, data oraz komentarz commita.
git revert
i git reset
– Cofanie zmian
W pracy nad projektem często zdarza się, że potrzebujemy cofnąć pewne zmiany. Git oferuje kilka potężnych narzędzi do tego celu, w tym git revert
i git reset
.
git revert
Użyj git revert
, aby cofnąć zmiany wprowadzone przez określony commit, tworząc nowy commit, który odwraca zmiany.
git revert <identyfikator_commita>
To bezpieczny sposób na cofanie zmian, ponieważ nie ingeruje w historię repozytorium.
git reset
Komenda git reset
służy do cofania zmian w repozytorium do określonego stanu. W zależności od użytego trybu (--soft
, --mixed
, --hard
), możesz cofnąć zmiany w indeksie i katalogu roboczym, a nawet usunąć commity z historii repozytorium.
git branch nazwa_gałęzi
Aby zobaczyć listę wszystkich dostępnych gałęzi:
git branch
Gałąź, na której obecnie się znajdujesz, będzie oznaczona gwiazdką.
git checkout
– Przełączanie się między gałęziami
Aby przełączyć się na inną gałąź, użyj komendy git checkout
:
git checkout nazwa_gałęzi
To polecenie zmienia bieżącą gałąź na wybraną, aktualizując katalog roboczy, aby odzwierciedlić jej ostatni stan.
W nowszych wersjach Git-a, możesz również użyć git switch
jako alternatywy dla git checkout
, aby przełączyć gałęzie:
git switch nazwa_gałęzi
git merge
– Łączenie zmian z różnych gałęzi
Gdy praca na danej gałęzi zostanie zakończona, możesz chcieć scalić te zmiany z powrotem do głównej linii rozwoju projektu. Służy do tego komenda git merge
:
git checkout gałąź_docelowa
git merge gałąź_źródłowa
To polecenie scala zmiany z gałąź_źródłowa
do gałąź_docelowa
. Git automatycznie stara się rozwiązać większość konfliktów, ale w niektórych przypadkach może wymagać ręcznej interwencji.
git rebase
– Przenoszenie zmian na inną bazę
Inną techniką na integrację zmian z jednej gałęzi do innej jest git rebase
. Rebase przenosi lub „przepisuje” zmiany z jednej gałęzi na koniec innej, tworząc liniową historię zmian.
git stash
Aby przywrócić schowane zmiany, użyj:
git stash pop
Możesz również wylistować wszystkie schowane zmiany (git stash list
) i wybrać, którą z nich chcesz przywrócić.
git tag
– Oznaczanie ważnych punktów w historii projektu
Tagi w Git służą do oznaczania ważnych punktów w historii projektu, takich jak wydania wersji. Tagi mogą być lekkie (tylko nazwa) lub opatrzone adnotacją (zawierające dodatkowe informacje, takie jak komentarz, autor, data).
Aby utworzyć nowy tag:
git tag -a nazwa_tagu -m "Komentarz do tagu"
Lista dostępnych tagów może być wyświetlona za pomocą git tag
. Aby sprawdzić informacje o konkretnym tagu, użyj git show nazwa_tagu
.
git cherry-pick
– Przenoszenie konkretnych zmian między gałęziami
Czasami może zajść potrzeba przeniesienia konkretnych zmian (commitów) z jednej gałęzi do innej. Zamiast mergować całą gałąź, możemy użyć git cherry-pick
, aby wybrać pojedyncze commity.
git cherry-pick <identyfikator_commita>
Ta komenda pozwala na precyzyjne przeniesienie zmian, ale należy używać jej z rozwagą, aby uniknąć problemów z historią commitów.
Praca z zdalnymi repozytoriami – git push
, git pull
, git fetch
Zdalne repozytoria są kluczowe w pracy zespołowej nad projektami. Pozwalają na wymianę zmian między wieloma użytkownikami i są zwykle hostowane na serwerach takich jak GitHub, GitLab czy Bitbucket.
git push
– wysyła zmiany z lokalnego repozytorium do zdalnego.bashgit push zdalne_repozytorium nazwa_gałęzi
git pull
– ściąga zmiany z zdalnego repozytorium i automatycznie scala je z lokalną gałęzią.bashgit pull zdalne_repozytorium nazwa_gałęzi
git fetch
– pobiera zmiany z zdalnego repozytorium, ale nie scala ich automatycznie z lokalną gałęzią. Pozwala to na ręczne zreviewowanie zmian przed ich scaleniem.bash