System kontroli wersji

System kontroli wersji śledzi wszystkie zmiany w wybranych plikach: zapamiętuje, co zostało dodane, usunięte albo zmodyfikowane oraz kto i kiedy dokonał tych zmian. Każda zapisana zmiana przechowywana jest wraz z komentarzem autora. W każdej chwili można przywrócić wcześniejszą wersję lub prześledzić historię modyfikacji.

Informacje na temat dokonanych zmian wraz z kodem źródłowym przechowywane są w repozytorium. Zdalne repozytorium ułatwia pracę wielu programistów nad tym samym projektem oraz upraszcza scalania efektów ich pracy.

RkHAtJyZGZSNw
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Jeśli podczas pracy chciałbyś zachować poszczególne wersje pliku, system kontroli wersji jest narzędziem pozwalającym to zrobić. W rezultacie nie trzeba sporządzać kopii zapasowej w oddzielnych folderach lub archiwach. Znacznie wygodniejsze jest przeglądanie historii zmian i – w razie potrzeby – przywrócenie wybranej wersji pliku.

Git

Git jest najpopularniejszym systemem kontroli wersji. Służy głównie do zarządzania kodem źródłowym aplikacji/projektu. Jest darmowym oprogramowaniem typu open source. Możesz spotkać się ze stwierdzeniem, że Git to rozproszony system kontroli wersji – oznacza to, że każdy programista ma na swoim komputerze własne, kompletne repozytorium (repozytorium lokalne). Oprócz tego może istnieć repozytorium centralne – zdalne.

Przykładem zdalnego repozytorium może być GitHub. Wyobraź sobie, że pracujesz z własnym, lokalnym repozytorium. W dowolnym momencie wprowadzone zmiany możesz scalić z repozytorium zdalnym. Kiedy to zrobisz, pozostałe osoby korzystające z centralnego repozytorium powinny zaktualizować swoje lokalne repozytoria i wprowadzić do nich zmiany, które pojawiły się w repozytorium zdalnym.

Rozproszony system kontroli wersji oznacza również, że nie ma jednego głównego repozytorium. W razie potrzeby repozytorium jednego użytkownika może być repozytorium zdalnym dla pozostałych. Dzięki lokalnemu repozytorium, podczas pracy nad projektem, nie potrzebujesz stałego połączenia ze zdalnym repozytorium – pracujesz w trybie offline.

Git bardzo dobrze wspiera pracę zespołową. Większość projektów open source, które prowadzone są przez całe społeczności (liczące nierzadko setki programistów), korzysta właśnie z narzędzia Git.

R1JFZMiyoE6M0
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Ciekawostka

Twórcą oprogramowania Git jest Linus Torvalds – twórca jądra systemu Linux. System kontroli wersji powstał właśnie po to, aby ułatwić pracę nad jądrem Linuksa.

Do pracy z repozytorium w serwisie GitHub będzie ci potrzebne specjalne oprogramowanie – klient Git. Możesz użyć narzędzia konsolowego lub któregoś programu z interfejsem graficznym.

W przedstawionych przykładach będziemy używać poleceń wydawanych z poziomu terminala. Są one bardziej uniwersalne (niezależne od oprogramowania czy systemu operacyjnego) oraz na tym etapie pozwalają lepiej zrozumieć omawiane zagadnienia. W tym celu zainstaluj klienta Git dla systemu Windows, jest to: Git for Windows - do pobrania z internetu. Dla zainstalowania systemu Linux użyj menadżera pakietów np. dla Ubuntu wydaj polecenie: sudo apt‑get install git.

Praca z klientem Git

Zanim rozpoczniemy pracę z systemem kontroli wersji, omówimy budowę repozytorium oraz podstawowe operacje na nim wykonywane.

Git obsługuje trzy obszary, w których przechowywane są pliki w repozytorium lokalnym. Są to:

  • katalog roboczy (workspace) – znajdują się w nim pliki projektu, które są modyfikowane przez użytkownika,

  • obszar przechowywania (przechowalnia) – miejsce tymczasowego zapisywania plików, które mają być zatwierdzone przy następnej operacji git commit,

  • katalog git, repozytorium lokalne – git przechowuje w nim informacje o projekcie, metadane plików i bazę danych.

Pliki z repozytorium lokalnego są przesyłane do repozytorium zdalnego lub aktualizowane na podstawie zapisanych w nim informacji.

R10t1jraXfPED
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Podstawowymi operacjami, które wykonujesz pracując z repozytorium są:

  • git clone – pierwsze pobranie zdalnego repozytorium do lokalnego katalogu,

  • git init – inicjalizacja repozytorium w katalogu (wymagana, gdy nie pobierasz zdalnego repozytorium),

  • git add – dodanie nowego pliku lub zmian do przechowalni,

  • git commit – zatwierdzenie zmian w lokalnym repozytorium,

  • git push – wysłanie wprowadzonych zmian do zdalnego repozytorium,

  • git pull – aktualizacja lokalnego repozytorium na podstawie informacji z repozytorium zdalnego.

Proces pracy ze zdalnym repozytorium wygląda następująco:

  1. Pobranie repozytorium (polecenie git clone).

  2. Dodanie nowych plików lub modyfikacja istniejących.

  3. Dodanie zmian do poczekalni (git add).

  4. Zatwierdzenie zmian i dodanie komentarza (git commit).

  5. Wysłanie zmienionych plików do zdalnego repozytorium (git push).

Czynności od 2. do 5. wykonuje się cyklicznie. W ten sposób powstaje historia projektu. Dobrą praktyką jest pobranie aktualnego stanu zdalnego repozytorium (polecenie git pull) przed rozpoczęciem wprowadzania zmian. Pozwala to uniknąć ewentualnych konfliktów, wynikających z pojawienia się w systemie dwóch różnych, a  równocześnie opracowanych wersji tego samego pliku.

GitHub

Tworzenie nowego repozytorium

Zaloguj się do serwisu GitHub.

Aby utworzyć repozytorium, w prawym górnym rogu z rozwijanego menu wybierz pozycję New repository.

Rg8ZPEQTlxCYT
awatar
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Pojawi się nowe okno. Wprowadź w nim nazwę repozytorium, opcjonalnie opis oraz kilka dodatkowych informacji.

R10p6eUoGqkVK
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Określ, czy repozytorium ma być publiczne, czy prywatne.

Jeśli zaznaczysz opcję Initialize this repository with a README, zostanie utworzony plik readme z opisem w języku MarkdownmarkdownMarkdown. Opis ten domyślnie wyświetlany jest przez serwis GitHub, gdy otworzysz repozytorium. Jest to szczególnie przydatne przy projektach publicznych. Osoba przeglądająca repozytorium uzyskuje najważniejsze informacje: dokumentację (lub jej część), przykłady użycia itp.

Kolejna opcja Add .gitignore służy do dodania pliku .gitignore. Plik ten jest elementem systemu kontroli wersji: zawiera informację, które pliki są ignorowane. Wprowadzone w nich zmiany nie będą śledzone, a one same nie są wysyłane do repozytorium. Są to najczęściej pliki wynikowe, pośrednie kompilacje. Możesz wybrać wygenerowanie pliku .gitignore z domyślną zawartością dla danego języka programowania (jeśli zajdzie potrzeba, będziesz samodzielnie go edytować).

Ostatnią opcją jest Add a licence – wybór licencji. Zostanie ona dołączona do repozytorium. Podobnie jak w przypadku opcji Add .gitignore także Add a licence nie musi zostać wybrana (pole None).

Teraz pozostaje jedynie kliknąć Create repository. Zostanie wyświetlona główna strona nowo utworzonego repozytorium.

RzMibXuT1Z0uZ
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Gdy mamy już utworzone repozytorium na zdalnym serwerze GitHub, pobierzemy je oraz dodamy zmiany. Proces pobierania nazywa się klonowaniem repozytorium.

Do wykonania tych operacji wykorzystamy konsolowego klienta Git. W celu sklonowania repozytorium w serwisie GitHub kopiujemy adres naszego repozytorium. W tym celu wybieramy opcję Clone or download, a następnie klikamy ikonę kopiowania adresu do schowka.

RDM9GoUq2ZOcv
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Pora sklonować repozytorium. W terminalu wprowadź komendę:

Linia 1. git clone otwórz nawias ostrokątny adres podkreślnik skopiowanego podkreślnik repozytorium zamknij nawias ostrokątny.

Zostaniesz poproszony o podanie nazwy użytkownika i hasła.

Wejdź do katalogu z projektem:

Linia 1. cd otwórz nawias ostrokątny nazwa podkreślnik repozytorium zamknij nawias ostrokątny.

Stan repozytorium możesz sprawdzić, wydając polecenie:

Linia 1. git status.

Powinieneś otrzymać informację, że nic nie zostało zmienione:

Linia 1. On branch master. Linia 2. Your branch is up to date with apostrof origin prawy ukośnik master apostrof kropka. Linia 3. nothing to commit przecinek working tree clean.

Utwórz nowy plik (np. main.cpp), po czym sprawdź stan repozytorium:

Linia 1. git status.

Otrzymasz informację, że jeden plik został dodany, a zmiany w nim nie są śledzone:

Linia 1. On branch master. Linia 2. Your branch is up to date with apostrof origin prawy ukośnik master apostrof kropka. Linia 3. Untracked files dwukropek. Linia 4. otwórz nawias okrągły use cudzysłów git add otwórz nawias ostrokątny file zamknij nawias ostrokątny kropka kropka kropka cudzysłów to include in what will be. Linia 5. committed zamknij nawias okrągły. Linia 6. main kropka cpp.

W celu rozpoczęcia śledzenia zmian pliku, wydaj polecenie:

Linia 1. git add otwórz nawias ostrokątny nazwa pliku zamknij nawias ostrokątny.

W przypadku dodania wielu plików, jednocześnie możesz użyć komendy:

Linia 1. git add minus A prawy ukośnik prawy ukośnik dodaje wszystkie pliki. Linia 2. git add kropka prawy ukośnik prawy ukośnik dodaje wszystkie pliki w bieżącym katalogu i podkatalogach kropka.

Teraz status repozytorium uległ zmianie, ponownie użyj polecenia git status::

Linia 1. On branch master. Linia 2. Your branch is up to date with apostrof origin prawy ukośnik master apostrof kropka. Linia 3. Changes to be committed dwukropek. Linia 4. otwórz nawias okrągły use cudzysłów git restore minus minus staged otwórz nawias ostrokątny file zamknij nawias ostrokątny kropka kropka kropka cudzysłów to unstage zamknij nawias okrągły. Linia 5. new file dwukropek main kropka cpp.

W celu zatwierdzenia zmian w lokalnym repozytorium, wydaj komendę:

Linia 1. git commit.

Otworzy się domyślny edytor tekstu i zostaniesz poproszony o wpisanie komentarza do wprowadzanych zmian.

Stan repozytorium wygląda następująco:

Linia 1. git status dwukropek. Linia 2. On branch master. Linia 3. Your branch is ahead of apostrof origin prawy ukośnik master apostrof by 1 commit kropka otwórz nawias okrągły use cudzysłów git push cudzysłów to publish your local commits zamknij nawias okrągły.

Pozostaje wysłać zmiany do zdalnego repozytorium. Służy do tego polecenie:

Linia 1. git push.

Jeśli wcześniej nie korzystałeś z klienta Git, zostaniesz poproszony o podanie informacji o użytkowniku (nazwa, adres e-mailowy).

Otwórz ponownie stronę z repozytorium w serwisie GitHub. Zobaczysz, że w projekcie zaszły zmiany:

R1IbMUDLe1SJF
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

Markdown
Markdown

język znaczników przeznaczony do formatowania tekstu; plik zapisany w formacie *.md jest konwertowany do postaci zapisanej w języku HTML

repozytorium
repozytorium

miejsce, w którym w sposób uporządkowany przechowywane są pliki wraz z historią zmian i dodatkowymi informacjami