Git #1: pierwsze kroki

Git #1: pierwsze kroki

Poziom trudności
2/5

Git jest najpopularniejszy system kontroli wersji. Nie bez powodu zdobył rzeszę zwolenników. Po pierwsze jest darmowy (wszyscy lubimy darmowe, dobrze działające i przydatne narzędzia). Większość operacji wykonujemy lokalnie, co znacznie ułatwia pracę zdalną i nie blokuje projektu w przypadkach problemów z połączeniem do serwera. Korzystamy z tak zwanych komitów (commits), w których są zapisane kolejne stany projektu (stan plików w danym momencie, lub ich referencje, jeżeli nie były zmieniane od poprzedniego komitu), możemy do nich wrócić lub przywrócić w każdym momencie projektu (także lokalnie), a także sprawdzić jaka część kodu została dodana przez którego członka zespołu. Z istniejącego projektu możemy tworzyć rozgałęzienia (branches), na których możemy równolegle wprowadzać zmiany i po zakończonej pracy dodawać je do głównego repozytorium w danej chwili. Może na tym skończę wychwalanie Git’a i przejdę do części praktycznej.

Instalacja

Na systemie linux (np. Ubuntu czy Raspbian), można użyć komendy apt-get install git

  1. sudo apt-get install git

Dla systemu Windows pobieramy git ze strony:

I instalujemy krok po kroku według wytycznych w instalatorze. Po instalacji i ponownym uruchomieniu systemu Windows, gdy w dowolnym folderze naciśniemy prawy przycisk myszy w menu zobaczymy „Git Bash Here”. Gdy wybierzemy tę opcję naszym oczom ukaże się konsola rodem z linuxa (na dowód jej „linuxowości” wpisz komendę ls, a zobaczysz informację o zawartości folderu, w którym się znajdujesz). Tak przygotowani możemy używać tych samych komend dla Windowsa i Linuxa.

Podstawowe komendy

Stwórzmy folder, w którym zainicjalizujemy repozytorium za pomocą git init

  1. pi@raspberrypi:~ $ mkdir test
  2. pi@raspberrypi:~ $ cd test
  3. pi@raspberrypi:~/test $ git init
  4. Initialized empty Git repository in /home/pi/test/.git/
  5. pi@raspberrypi:~/test $

Aby dowiedzieć się, jaki jest status naszych zmian, czy gdzie się znajdujemy (na jakiej gałęzi) wystarczy, że użyjemy komendy git status

  1. pi@raspberrypi:~/test $ git status
  2. On branch master
  3. Initial commit
  4. nothing to commit (create/copy files and use "git add" to track)
  5. pi@raspberrypi:~/test $

Wychodzi na to, że jeszcze nic nie posiadamy na naszym branchu master, który tworzy się przy inicjalizacji i jest naszą główną gałęzią. Kolejnym krokiem będzie dodanie plików. A więc stwórzmy plik „file_one.py” i dodajmy go do repozytorium komendą git add

  1. pi@raspberrypi:~/test $ touch file_one.py
  2. pi@raspberrypi:~/test $ ls
  3. file_one.py
  4. pi@raspberrypi:~/test $ git add file_one.py
  5. pi@raspberrypi:~/test $ git status
  6. On branch master
  7. Initial commit
  8. Changes to be committed:
  9. (use "git rm --cached ..." to unstage)
  10. new file: file_one.py
  11. pi@raspberrypi:~/test $

Po dodaniu pliku użyłem komendy git status, aby pokazać jak, po dodaniu nowego pliku, Git go rozpoznaje. Aby go zapisać (na razie lokalnie), użyjemy komendy git commit -m „Tytuł naszego komita”. Tytuły komitów powinny opisywać klarownie i zwięźle, co dany zapis zawiera – tak aby wszyscy pracujący nad projektem w prosty sposób mogli rozszyfrować, co znajduje się w dodanych zmianach.

  1. pi@raspberrypi:~/test $ git commit -m "First file (file_one.py) was added"
  2. *** Please tell me who you are.
  3. Run
  4. git config --global user.email "you@example.com"
  5. git config --global user.name "Your Name"
  6. to set your account's default identity.
  7. Omit --global to set the identity only in this repository.
  8. fatal: empty ident name (for ) not allowed
  9. pi@raspberrypi:~/test $

Operacja jak widać, skończyła się niepowodzeniem, gdyż jak widzimy nie dokończyliśmy konfiguracji naszego Git’a. System wymaga od nas podania maila i imienia, jest to potrzebne do identyfikacji osoby, która wprowadza zmiany. Zróbmy to, aby w przyszłości każdy mógł odnaleźć informacje o twórcy „najlepszych” 😉 części kodu w naszych projektach.

  1. pi@raspberrypi:~/test $ git config --global user.email "szymon@qabrio.pl"
  2. pi@raspberrypi:~/test $ git config --global user.name "Szymon"

Tak przygotowani możemy komitować nasze zmiany.

  1. pi@raspberrypi:~/test $ git commit -m "First file (file_one.py) was added"
  2. [master (root-commit) 68ce2aa] First file (file_one.py) was added
  3. 1 file changed, 0 insertions(+), 0 deletions(-)
  4. create mode 100644 file_one.py
  5. pi@raspberrypi:~/test $ git status
  6. On branch master
  7. nothing to commit, working tree clean
  8. pi@raspberrypi:~/test $

Jak widzimy, zmiany zostały zapisane. Aby zobaczyć historię wprowadzonych zmian, użyj komendy git log

  1. pi@raspberrypi:~/test $ git log
  2. commit 68ce2aa9e3f62e2f7a89bee45265e0cadb9edb35
  3. Author: Szymon <szymon@qabrio.pl>
  4. Date: Tue Jul 23 22:29:18 2019 +0100
  5. First file (file_one.py) was added
  6. pi@raspberrypi:~/test $

Na deser tego artykułu plik .gitignor. Dodane do niego ścieżki i pliki nie będą wciągane do komitów ani widziane w statusie repozytorium. Niesamowicie przydatne np. przy tworzeniu logów których (zazwyczaj) nie chcemy umieszczać w repozytorium. Stwórzmy więc pliki .gitignor i test_file.log.

  1. pi@raspberrypi:~/test $ touch test_file.log
  2. pi@raspberrypi:~/test $ touch .gitignore
  3. pi@raspberrypi:~/test $ git status
  4. On branch master
  5. Untracked files:
  6. (use "git add ..." to include in what will be committed)
  7. .gitignore
  8. test_file.log
  9. nothing added to commit but untracked files present (use "git add" to track)

Za pomocą pliku .gitignor, „zignorujemy”  test_file.log. Użyj edytora Nano (nano .gitignore) i dodaj linijkę test_file.log, po czym zapisz plik. Po tej operacji wywołaj znowu git status

  1. pi@raspberrypi:~/test $ git status
  2. On branch master
  3. Untracked files:
  4. (use "git add ..." to include in what will be committed)
  5. .gitignore
  6. nothing added to commit but untracked files present (use "git add" to track)

Plik test_file.log znika z proponowanych do commitowania plików.

Tak przygotowani możemy wyjść z cienia lokalnych zmian na świat. Ale o tym w następnej części.

Dodaj komentarz