GIT – system kontroli wersji, wprowadzenie

Jak czytamy na wikipedii GIT to rozproszony system kontroli wersji (jeden z wielu) udostępniany na licencji GNU GPL w wersji 2. Jednak sama definicja nie wiele mówi. Postaram się przybliżyć w tym wpisie czym jest GIT, jakie korzyści płyną z korzystania z niego oraz opis podstawowych komend, bez których korzystanie z tego systemu kontroli wersji będzie niemożliwe.

Przyjrzyjmy się na początku samej historii. GIT-a stworzył Linus Torvalds – fiński programista, który potrzebował narzędzia, które będzie kontrolowało zmiany w plikach wprowadzane przez wielu użytkowników.  Ponieważ żadne z dostępnych aplikacji nie spełniało jego wymagań to 2005 roku stworzył właśnie GIT-a, który do dziś wspiera tworzenie jądra Linux-a (którego Torvalds jest autorem) i miliony innych aplikacji.

System kontroli wersji

System kontroli wersji (ang. version/revision control system, VCS) – szumnie brzmi… a czym tak na prawdę jest? Wyobraź sobie, że masz dokument (wzór), który pobrało kilka osób. Każda z nich postanowiła poprawić (ulepszyć) jeden rozdział. Następnie każda z tych osób chce wprowadzić swoje zmiany we wzorze. Aby wszystkie zmiany zostały wprowadzone muszą te osoby się porozumieć, aby każdy naniósł tylko swoje ulepszenia i nie usunął innych.

Nad tym wszystkim czuwa właśnie system kontroli wersji. GIT pozwala skopiować zdalne repozytorium (clone) – nie tylko jeden dokument (plik), a wiele. Nanieść poprawki oraz stworzyć nowe pliki (add), skomentować naniesione modyfikacje (commit) oraz wysłać je do repozytorium (push). Wszystkie zmiany są podpisane przez autora i zawsze możemy wrócić do dowolnej wersji naszego dokumentu.

GIT informuje nas również o ewentualnych problemach (kolizjach) przy wysyłaniu zmian. Tego typu problemy występują, gdy osoby zmodyfikowały ten sam fragment kodu i aplikacja nie wie, która część jest poprawna.

Korzyści płynące z używania GIT-a

  • historia wszystkich zmian
  • powrót do dowolnej zmiany
  • wygodna praca wielu użytkowników
  • pełna kontrola kolizji
  • statystyki wydajności użytkowników
  • backup (kopia bezpieczeństwa)

Podstawowe komendy

  • git init – inicjalizujemy repozytorium w katalogu,  w którym obecnie się znajdujemy
  • git config --global user.name [nazwa użytkownika] – tworzymy nazwę użytkownika, który modyfikuje pliki (globalnie)
  • git config --local user.name [nazwa użytkownika] – tworzymy nazwę użytkownika, który modyfikuje pliki (lokalnie, tylko w tym projekcie)
  • git config --global user.email [adres email] – tworzymy email użytkownika, który modyfikuje pliki (globalnie)
  • git config --local user.email [adres email] – tworzymy email użytkownika, który modyfikuje pliki (lokalnie, tylko w tym projekcie)
  • git add [nazwa pliku]  – dodajemy pliki do poczekalni (ang. staging area)
  • git add -f [nazwa pliku]  – wymuszenie dodania do poczekalni pliku zdefiniowanego w .gitignore
  • git add . – dodajemy wszystkie pliki  do poczekalnie znajdujące się katalogu
  • git add --dry-run [nazwa pliku] – symulujemy dodanie do poczekalni, aby sprawdzić czy nie dodamy czegoś niepotrzebnie np. git add --dry-run js/*.js
  • git add -p – dodajemy do poczekalni tylko część zmian
  • git commit -m [komentarz] – dodajemy pliki do historii wraz z odpowiednim komentarzem
  • git commit --amend [komentarz] – dodajemy zmiany do poprzedniego commita
  • git commit --amend --reset-author [komentarz] – zmieniamy autora commit-a
  • git status  – informacja o naszym repozytorium lokalnym tj. jakie pliki dodaliśmy do poczekalni, jakie nie itp.
  • git log  – informacja o historii naszych zmian
  • git log --oneline  – informacja o historii w jednej linii
  • git diff  – porównuje zmiany w naszym repozytorium
  • git reset HEAD [nazwa pliku] – usuwa plik z poczekalni
  • git checkout -- [nazwa pliku] – usuwa modyfikacje z pliku
  • git rm --cached [nazwa pliku] – usuwa plik z repozytorium, ale zostawia na dysku
  • git rm --force [nazwa pliku] – usuwa plik z repozytorium i z naszego dysku
  • git reset HEAD --hard – cofamy wszystkie zmiany
  • git reset HEAD --hard – cofamy wszystkie zmiany
  • git reabase -i  – tryb interaktywny do zmian commit-ów
  • git show [identyfikator commit-a] – pokazuje zmiany w danym commit-cie

Plik .gitignore

Dzięki temu plikowi umieszczonemu w katalogu głównym naszego projektu wymuszamy ignorowanie dodania do poczekalni plików, które mogły by zostać dodane za pomocą komendy git add . . Poniżej zamieszczam kilka przykładowych wykluczeń. Pamiętaj, że nie musimy używać kompletnych nazw/ścieżek.

# ignoruj pliki o rozszerzeniu o lub a
*.[oa]
# ignoruj pliki zakończone znakiem ~
*~
# ignoruj pliki o rozszerzeniu .b
*.b
# ale uwzględniaj lib.b, pomimo ignorowania .b w linijce powyżej
!lib.b
# ignoruj plik TODO w katalogu głównym, ale nie podkatalog/TODO
/TODO
# ignoruj wszystkie pliki znajdujące się w katalogu build/
build/
# ignoruj doc/notatki.txt, ale nie doc/server/arch.txt
doc/*.txt

Polecam dokładne zapoznanie się z dokumentacją.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*

*

20 + twenty =