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ę znajdujemygit 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 .gitignoregit add .
– dodajemy wszystkie pliki do poczekalnie znajdujące się katalogugit 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ęść zmiangit commit -m [komentarz]
– dodajemy pliki do historii wraz z odpowiednim komentarzemgit commit --amend [komentarz]
– dodajemy zmiany do poprzedniego commitagit commit --amend --reset-author [komentarz]
– zmieniamy autora commit-agit status
– informacja o naszym repozytorium lokalnym tj. jakie pliki dodaliśmy do poczekalni, jakie nie itp.git log
– informacja o historii naszych zmiangit log --oneline
– informacja o historii w jednej liniigit diff
– porównuje zmiany w naszym repozytoriumgit reset HEAD [nazwa pliku]
– usuwa plik z poczekalnigit checkout -- [nazwa pliku]
– usuwa modyfikacje z plikugit rm --cached [nazwa pliku]
– usuwa plik z repozytorium, ale zostawia na dyskugit rm --force [nazwa pliku]
– usuwa plik z repozytorium i z naszego dyskugit reset HEAD --hard
– cofamy wszystkie zmianygit reset HEAD --hard
– cofamy wszystkie zmianygit reabase -i
– tryb interaktywny do zmian commit-ówgit 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ą.