Podstawowe użycie Git

Git - podstawowe komendy

Ostatnim razem mówiliśmy trochę o tym dlaczego Git jest bardzo użytecznym narzędziem, zwłaszcza dla programistów. Dzisiaj chciałabym się skupić na tym, jak zacząć używać narzędzia Git przynajmniej w bardzo podstawowym zakresie. Pokażę kilka najczęściej używanych poleceń, ale jeżeli chcecie się dowiedzieć więcej polecam dokumentację.

Zaczynamy!

Git jest rozproszonym systemem wersjonowania (distributed repository lub distributed version control system). To znaczy, że każdy w zespole ma u siebie lokalnie całą historię zmian. Dzięki temu można dodać do repozytorium kolejne swoje zmiany bez połączenia z Internetem. Jednak najważniejszą cechą takiego systemu kontroli wersji jest to, że nawet gdy u jednej osoby zmiany zostaną utracone reszta zespołu ciągle posiada całą historię prac. W przypadku scentralizowanego systemy kontroli wersji to problemy w centralnym repozytorium powodują utratę zmian u wszystkich członków zespołu.

Mówiąc o narzędziu Git będę używać wiersza poleceń. Myślę, że taki sposób użycia jest łatwiejszy do zrozumienia co tak naprawdę się dzieje niż używanie jakichś graficznych programów.

Po pierwsze - konfiguracja

Gdy używamy narzędzia Git, chcemy wiedzieć które zmiany były zrobione przez nas. By to ustawić wykonujemy następujące polecenia:

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

Możemy też ustawić by polecenia z narzędzia Git wyświetlały się na kolorowo:

git config --global color.ui true

Stworzenie swojego pierwszego repozytorium

Aby zacząć używać narzędzia Git w naszym projekcie, przechodzimy do katalogu naszego projektu za pomocą terminala (wiersza poleceń) i inicjujemy narzędzie Git w środku.

git init

To polecenie rozpocznie pracę z Git tylko lokalnie na naszym komputerze. By można było umieścić nasze repozytorium na serwerze będziemy potrzebować narzędzi takich jak GitHub lub Bitbucket. Dobrze, teraz możemy zacząć prawdziwą pracę z naszym repozytorium. Bardzo przydatną komendą będzie:

git status

To polecenie mówi nam co zmieniło się od ostatniego użycia narzędzia Git. Przykładowo mamy plik napisany w języku Ruby.

# hello_world.rb
def hello
  "hello"
end

Ten plik nie jest śledzony przez Git. W takiej sytuacji możemy zobaczyć coś takiego:

git status

# On branch master
#
# Initial commit
#
# 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)

Pierwszy commit

Teraz musimy powiedzieć do naszego systemu kontroli wersji: Proszę, śledź zmiany w tym pliku:

git add hello_world.rb

Po wykonaniu tego polecenia sprawdzamy status naszych zmian git status i otrzymujemy:

git status

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

Teraz możemy zrobić commit. Można powiedzieć, że commit to takie przygotowane do wysłania pudełko. Do pudełka wkładamy wszystkie elementy, które wspólnie tworzą jedną całość. Ponieważ zmieniliśmy tylko jeden plik, to nasz commit będzie składał się tylko z niego.

git commit -m "Create a hello function"

Teraz Git status pokazuje:

git status

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

Jeżeli zmienimy naszą funkcję, to zobaczymy:

# hello_world.rb
def hello
  "hello world"
end
git status

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

Jeżeli chcemy zrobić nowy commit, musimy dodać nasze zmiany do pudełka:

git add hello_world.rb

i oznaczyć opisem co jest w środku:

git commit -m "Change our hello function"

Wysłanie/ściągnięcie zmian do/z zdalnego repozytorium

W tej chwili mamy zapisane nasze zmiany tylko lokalnie. Teraz chcielibyśmy wysłać je gdzieś na zewnątrz (na jakiś serwer), tak byśmy mogli wymieniać się naszymi zmianami z całym zespołem. Te dwie czynności mają swoje nazwy. Wysyłanie zmian na serwer to push a ściąganie to pull. Do tego posłuży nam GitHub ale można też korzystać z innych rozwiązań.

Kiedy mamy już swoje konto na GitHub, tworzymy nowe repozytorium. A lokalnie w linii poleceń wykonujemy następującą komendę:

git remote add origin link_to_or_repo

Nic się nie martwcie, po stworzeniu nowego repozytorium, GitHub pokaże Wam wszystkie komendy jakie potrzebujecie wykonać. Wystarczy tylko skopiować je do swojego terminala. W skrócie komenda ta mówi nam: Hej, od tej chwili mam zdalne repozytorium (czyli mam repozytorium na serwerze) i nazywa się ono origin. Gdy będziemy chcieli wysłać tam nasze zmiany to:

git push -u origin master

Mówimy wtedy do narzędzia Git: Wyślij mój kod na gałąź (branch) master na repozytorium o nazwie origin.

Co to jest branch (gałąź)?

Branch jest jak ścieżka. W naszym projekcie mamy wiele ścieżek, każda z nich może wyglądać inaczej, ale w danym momencie możemy iść tylko jedną ścieżką. Domyślnie po stworzeniu repozytorium Git ma jedną ścieżkę, którą nazywa master. Po poleceniu, które widzimy nieco wyżej GitHub zapyta się nas o naszą nazwę użytkownika (login) i hasło. Gdy podamy te informacje nasze zmiany znajdą się na serwerze.

Ostatnia rzecz!

Kiedy pracujemy z innymi osobami nad jednym projektem to tak jak już wspominałam chcemy się wymieniać naszymi zmianami. Do tej pory nauczyliśmy się wysyłać na serwer zmiany teraz chcielibyśmy je stamtąd pobrać:

git pull

To polecenie pull spowoduje, że pobierzemy z naszego repozytorium o nazwie origin bieżący branch (czyli tą naszą ścieżkę). Ponieważ mamy tylko jeden branch - master wszystkie zmiany zostaną dociągnięte właśnie dla gałęzi (branch) master.

To na razie tyle. Szybki przegląd podstawowych poleceń używanych do obsługi systemu kontroli wersji jakim jest Git. Mam nadzieje, że Wam się podobało. Jeżeli chcielibyście dowiedzieć sie czegoś więcej lub chcielibyście bym coś bardziej wytłumaczyła zostawcie komentarz. Do zobaczenia następnym razem. Pa!