Git - podstawowe komendy

Jak zacząć używać gita?

Git jest ważnym narzędziem dla każdego programisty i programistki. Jest to jeden z systemów kontroli wersji. Ze względu na swoje ogromne możliwości i szerokie zastosowanie jest też jednym z najbardziej znanych narzędzi tego typu. Jeżeli chcesz zostać programistką lub podnieść swoje kwalifikacje to szczerze polecam Ci zapoznanie się z tym narzędziem. By pomóc Ci w tym zadaniu, dzisiaj skupimy się na podstawowych komendach git-a. Ten artykuł jest drugim artykułem z serii o narzędziu git. Poprzednim razem mówiłam dokładniej o tym czym jest git oraz o tym dlaczego warto używać git-a w codziennej pracy. Tym razem skupimy się na stworzeniu pierwszego repozytorium git, konfiguracji git-a lokalnie i na zewnętrznym serwerze oraz na obsłudze najpotrzebniejszych komend. Mamy dużo do zrobienia, więc zaczynajmy!

Co to jest git?

Git jest rozproszonym systemem wersjonowania (distributed repository lub distributed version control system). Rozproszonym to znaczy, że każda osoba w Twoim zespole ma u siebie lokalnie na komputerze całą historię zmian. Możesz zapisywać nowe zmiany bez konieczności łączenia się z Internetem. Nie musisz też za każdym razem synchronizować swojej wersji projektu z resztą zespołu. To kiedy synchronizacja nastąpi zależy od Ciebie. Jednak najważniejszą cechą git-a jest to, że nawet gdy coś stanie się z Twoim komputerem, to Twój zespół ciągle będzie miał kopie wszystkich zmian w repozytorium (w skrócie repo). Tak długo jak przynajmniej jedna osoba w zespole przechowuje historię zmian, nie stracisz dostępu do wykonanej pracy. W przypadku scentralizowanego systemu kontroli wersji problemy w centralnym repozytorium mogą spowodować utratę zmian u wszystkich członków zespołu.

Zanim przejdziemy dalej, jedna mała uwaga. Mówiąc o narzędziu git będę skupiać się tylko i wyłącznie na użyciu wiersza poleceń. Istnieją co prawda różnego rodzaju narzędzia graficzne do jego obsługi. Jednak ja, w codziennej pracy, używam tylko wiersza poleceń. Daje mi to pełną kontrolę nad tym co robię i przede wszystkim pozwala lepiej zrozumieć sposób działania narzędzia git. A o to nam właśnie tutaj chodzi. Programy graficzne często ukrywają przed użytkownikiem to, co dzieje się pod spodem. Utrudnia to dobre zrozumienie git-a.

Konfiguracja narzędzia git

Najpierw instalacja. By jej dokonać wejdź na stronę dokumentacji git-a i postępuj zgodnie ze wskazówkami. Po zakończeniu instalacji możesz przejść do podstawowej konfiguracji. Gdy używasz git-a, zwłaszcza jeżeli pracujesz w zespole, ważna jest informacja kto dokonał zmian w kodzie. Musisz tą informacje ustawić na swoim komputerze. Do tego możesz użyć poniższych poleceń:

git config --global user.name "Your Name"
git config --global user.email your_email_address@example.com

Możesz też ustawić dla narzędzia git wyświetlanie komunikatów w kolorach. Dzięki temu przykładowo pliki zmodyfikowane będziesz wiedzieć w kolorze czerwonym.

git config --global color.ui true

Stworzenie pierwszego repozytorium

Po instalacji git-a, nie śledzi on zmian we wszystkich plikach w Twoim systemie. Jeżeli masz pliki, na których zależy Ci by ich zmiany były śledzone musisz o tym powiedzieć narzędziu git. By to osiągnąć przejdź do wybranego folderu używając do tego terminala, a następnie wywołaj polecenie:

git init

To polecenie zainicjuje lokalne repozytorium git. Czyli spowoduje, że git zacznie interesować się zmianami we wszystkich plikach wybranego katalogu. Nie spowoduje to jeszcze, że reszta Twojego zespołu będzie miała dostęp do Twoich zmian. By to osiągnąć potrzebujesz zdalnego repozytorium, czyli takiego na zewnętrznym serwerze. Można to zrobić na wiele sposobów. W Internecie istnieją platformy umożliwiające obsługę zdalnego repozytorium takie jak GitHub, Bitbucket czy GitLab. Sama też mogłabyś skonfigurować własny serwer git-a. Najważniejsze jest tutaj zapamiętanie, że git to nie GitHub. Git to narzędzie do zarządzania wersjami a także protokół komunikacji podobnie jak https, ftp czy ssh. GitHub to platforma używająca git-a i dostarczająca funkcjonalność zdalnego repozytorium.

Status zmian

Kiedy masz już lokalnie ustawione repozytorium, możesz wywołać następujące polecenie:

git status

To polecenie powie Ci jakie zmiany zostały już zapisane przy pomocy narzędzia git, a jakie jeszcze nie. Można też powiedzieć, że to polecenie pokazuje co się ostatnio zmieniło. Gdy dopiero zainicjowałaś swoje repozytorium, to żaden plik nie został jeszcze w repozytorium zapisany. Załóżmy więc, że masz w swoim repozytorium, czyli katalogu gdzie użyłaś polecenia git init, jeden plik napisany w języku Ruby:

# hello_world.rb
def hello
  "hello"
end

Ten plik nie jest jeszcze śledzony przez git-a. W takiej sytuacji możemy zobaczyć coś takiego:

git status

# On branch master
#
# No commits yet
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   hello_world.rb
#
# nothing added to commit but untracked files present (use "git add" to track)

Zapisanie zmian w repozytorium - pierwszy commit

Nadszedł czas by powiedzieć systemowi kontroli wersji, by zaczął śledzić plik hello_world.rb. Do tego potrzebne będzie Ci polecenie:

git add hello_world.rb

Po wykonaniu tego polecenia możesz sprawdzić jeszcze raz status zmian:

git status

# On branch master
#
# No commits yet
#
# Changes to be commited:
#   (use "git rm --cached  <file>..." to unstage)
#
#   new file: hello_world.rb
#

Twój plik został dodany do plików śledzonych przez git-a, jednak zmiany nie są jeszcze zapisane. Do zapisania zmian posłuży Ci polecenie commit. Możesz myśleć o tym poleceniu jak o wkładaniu rzeczy do pudełka. Powiedzmy, że masz w domu dużo długopisów, mazaków i kredek. Chcesz zrobić porządek. Najpierw wybierasz te przybory do pisania, które lubisz i z których będziesz korzystać. To jest właśnie polecenie git add. Następnie wybrane przybory wkładasz do swojego nowego pudełka w stylu Marie Kondo i zamykasz to pudełko. Zgromadziłaś w jednym miejscu przedmioty z tej samej kategorii lub w jakiś sposób ze sobą powiązane. To właśnie jest commit. Spakujmy pudełko dla naszego pliku Ruby:

git commit -m "Create a hello function"

Teraz git status pokazuje:

git status

# On branch master
# nothing to commit (working directory clean)

Wszystkie zmiany w pliku hello_world.rb zostały zapisane. Gdy zmienisz odrobinę funkcję hello:

# hello_world.rb
def hello
  "hello world"
end

polecenie git status pokaże:

git status

# On branch master
# Changed but not updated:
#
#  modified: hello_world.rb
# no changes add to commit

Jeżeli chcesz zapisać nowe zmiany, czyli zrobić nowy commit, musisz dodać je do nowego pudełka:

git add hello_world.rb
git commit -m "Change our hello function"

Synchronizacja zmian ze zdalnym repozytorium

W tej chwili Twoje zmiany są zapisane tylko lokalnie. Czas, by umieścić kod na zdalnym repozytorium. To pozwoli Ci udostępnić Twoje zmiany innym członkom zespołu. Posłuży do tego polecenie git push. Zanim będziesz mogła z niego skorzystać potrzebujesz skonfigurować takie zdalne repozytorium. Pokażę Ci jak to zrobić na przykładzie GitHub, ale możesz użyć do tego celu innych platform. Pierwszą rzeczą jest posiadanie konta na GitHubie. Gdy takie konto już posiadasz zaloguj się i znajdź polecenie stwórz nowe repozytorium (create new repository). Po jego wykonaniu czas przejść do konsoli i wykonać następującą komendę:

git remote add origin link_to_your_remote_repository

Ta komenda sprawi, że Twój lokalny git będzie wiedział gdzie znajduje się zdalne repozytorium. Mówi ona ustaw zdalne repozytorium o nazwie origin na adres link_to_your_remote_repository. Za każdym razem gdy będziesz używać nazwy origin git będzie wiedział, że masz na myśli zdalne repozytorium GitHub. Nic się nie martw, jeżeli po stworzeniu nowego zdalnego repozytorium, nie wiesz co wstawić w link_to_your_remote_repository. GitHub pokaże Ci potrzebą komendę. Wystarczy, że skopiujesz ją do swojego terminala. Teraz czas by wysłać zmiany na serwer:

git push origin master

Komenda ta spowoduje, że wszystkie zapisane zmiany znajdujące się na lokalnej gałęzi master zostaną wysłane na gałąź master na zdalnym repozytorium o nazwie origin. Zostaniesz zapytana o login i hasło do GitHub. Po wpisaniu poprawnie tych danych w konsoli Twój kod będzie dostępny na platformie GitHub.

Co to jest gałąź, czyli inaczej branch?

Gałąź to pewna wersja Twojego kodu. To trochę jakbyś miała do czynienia ze światami równoległymi. W jednym świecie możesz być bohaterką, a w innym normalnym obywatelem. Podobnie jest z kodem. Możesz mieć wiele różnych wersji kodu. Główna wersja domyślnie znajduje się na gałęzi master. To tylko nazwa, która reprezentuje konkretną wersję kodu. Za każdym razem, gdy zamierzasz stworzyć nową wersję kodu, dobrze jest przygotować osobną gałąź, która w końcowym efekcie zostanie połączona z gałęzią główną. Słowo gałąź możesz też kojarzyć z drzewami. To będzie dobra analogia do tego, czym jest gałąź w git-cie. Każde drzewo ma wiele gałęzi, tak samo jak każde repozytorium git-a.

Jak ściągnąć lokalnie nowe zmiany?

Po pierwsze, osoba której zmiany chcesz mieć dostępne lokalnie musi wysłać je do zdalnego repozytorium. Tak samo jak Ty zrobiłaś to wcześniej, czyli za pomocą polecenia git push. Następnie możesz za pomocą polecenia git pull ściągnąć zmiany do siebie.

git pull origin master

To polecenie spowoduje, że wszystkie zmiany z gałęzi master ze zdalnego repozytorium o nazwie origin zostaną pobrane do Twojego lokalnego repozytorium na gałąź master. Tutaj też zostaniesz poproszona o podanie loginu i hasła do GitHub. Po uwierzytelnieniu wszystkie zmiany będziesz mieć dostępne lokalnie.

Inne artykuły w cyklu:

Jeżeli interesuje Cię więcej informacji na temat narzędzia git, możesz zajrzeć na stronę dokumentacji git-a.