W ostatnim czasie doszedłem do momentu, w którym chciałem przejść z SVN na GIT-a. I tutaj pojawia się pytanie; Jak nauczyć się GITa? Otóż nie jest to takie łatwe, gdyż wbrew pozorom GIT i SVN znacząco się różnią(jeśli nie rozumiesz niektórych słow z poniższego wpisu na końcu wpisu znajdziesz słowniczek):

SVN

Subversion jest to system, który powstał głownie w celu zastąpienia CVS. SVN jest stosunkowo prostym systemem w porównaniu do GIT-a, nie jest systemem rozproszonym. Aby pobrać zawartość repozytorium stosujemy komendę SVN checkout, aby dodać plik używamy komendy SVN add, aby zaktualizować pliki do najnowszej wersji używamy polecenia SVN update, natomiast, aby wysłać pliki do repozytorium korzystamy z SVN commit. Właściwie na tych kilku komendach możemy oprzeć swoje działanie z SVN. GIT jest o wiele bardziej złożonym systemem o czym za chwilę.

GIT

GIT jest to system wersji napisany przez twórcę Linuxa na potrzeby rozwoju tego systemu operacyjnego. Jest systemem rozproszonym i właściwie można podzielić go na dwie części. Commit-y są 2 stopniowe, pierwszy idzie do lokalnego repozytorium, a drugi gdy chcemy może zostać wypushowany na repozytorium zdalne do dowolnego brancha. I tutaj jest pierwsza zasadnicza różnica pomiędzy SVN, a GIT-em. GIT może posiadać wiele repozytoriów zdalnych, a na które pushujemy projekt jest ustalane przez komendę GIT push nazwa_repo nazwa_brancha np GIT push orgin master wypushuje projekt do zdalnego repozytorium o nazwie origin do brancha o nazwie master. Branchowanie w GIT-cie jest dość proste. Gdy chcemy sobie stworzyć nową gałąź developerską po prostu używamy polecenia GIT branch nazwa_brancha np. GIT branch nowyficzer i przełączamy środowisko programistyczne poleceniem GIT checkout nowyficzer. W tym miejscu warto zauważyć, że GIT checkout, a SVN checkout działają całkowicie inaczej. W SVN checkout pobiera projekt z repo, w GIT-cie przełącza do wybranego brancha.

W GIT możemy utworzyć sobie repozytorium w dowolnym miejscu poleceniem GIT init i mając lokalne repozytorium możemy działać na systemie kontroli wersjioffline. To bardzo ważna zaleta GIT-a nad SVN. Kolejną istotną rzeczą jest praca z branchami, w SVN po prostu tworzyliśmy kopie repozytorium i umieszczaliśmy ją w katalogu branches, w GIT jest to bardziej przemyślane i pliki nie są kopiowane. Trzymane są relacje i zmiany dlatego też repozytorium zajmuje mniej miejsca. Kolejną dużą zaletą GIT-a jest szybkość. SVN jest o wiele wolniejszym systemem kontroli wersji niż GIT.

W GIT tak zwany workflow jest o wiele lepszy, możesz pracować nad wieloma branchami i potem je złączyć i wysłać(PUSH) jako jeden commit do repozytorium zdalnego za pomocą polecenia GIT merge.

Aby nauczyć się GIT-a polecam tą grę, pozwala ona poziomami nauczyć się podstawowych operacji na GIT.

Kolejną fajną rzeczą, która została stworzona dla GIT-a jest GitHub, który za darmo oferuje hosting repozytoriów open source. Jeśli szukasz bardziej komercyjnych rozwiązań to musisz zobaczyć na GitLab-a, który jest darmowym narzędziem do zarządzania repozytoriami GIT-a.

Kolejną fajną rzeczą ułatwiającą workflow i korzystanie z GIT-a jest GIT flow, ale o nim postaram się napisać w kolejnym wpisie, gdyż jest to szerszy temat.

Jeśli jesteście zainteresowani rozszerzeniem wpisu to proszę o komentarze. Jeśli będzie potrzeba dodam wpis z tutorialem jak krok po kroku zainstalować git-a stworzyć repozytorium na githubie i korzystać z niego w IDE(PHPStorm), konsoli, GIT console lub np. Tortoise GIT.

Na koniec słownictwo, które może się przydać w zrozumieniu wpisu:

  • branch – w kontroli wersji jest to gałąź w rozwoju oprogramowania, która umożliwia jego produkcje równolegle do innych branchów lub głównej gałęzi rozwoju oprogramowania.
  • push  w GIT jest to komenda umożliwiająca przesłanie plików z repozytorium lokalnego na repozytorium zdalne,
  • commit – jest to przesłanie zmian z plików to aktualnego brancha w repozytorium
  • update – jest to aktualizacja plików z repozytorium
  • VCS – version control system czyli system kontroli wersji
  • CVS – Concurrent Versions System jest jednym z pierwszych systemów do kontroli wersji oprogramowania

Najczęściej używane komendy GIT:

  • git init – inicjalizacja repozytorium gita
  • git clone – skopiowanie plików z repozytorium zdalnego
  • git add – dodanie pliku(ów) do repozytorium
  • git rm – usunięcie pliku(ów) z repozytorium
  • git commit – pobranie wszystkich zmian i stworzenie obiektu typu commit
  • git status – sprawdza status gita, porównuje zmiany w plikach z aktualnym stanem repozytorium
  • git branch – tworzy nowy branch
  • git checkout – przełącza się na branch
  • git merge – łączy jeden lub kilka branchów i tworzy nowy commit jeśli nie ma konfliktów
  • git tag – taguje określony commit
  • git pull – pobierana dane z zdalnego repozytorium i porównuje je z lokalnym
  • git push – wygrywa dane z lokalnego repozytorium na zdalne do określonego brancha

Najczęściej używane komendy SVN

  • svn checkout(co) – pobiera pliki z repozytorium
  • svn commit(ci) – wysyła zmiany w plikach do repozytorium
  • svn add – dodaje pliki do systemu kontroli wersji
  • svn delete – usuwa plik z repozytorium i z lokalnego systemu plików
  • svn status – porównuje status zmian w plikach z tym z repozytorium
  • svn update(up) – pobiera zmiany w repozytorium do lokalnego systemu plików
  • svn propset – pozwala ustawić właściowosć

*każda komenda SVN posiada skróty zapisane w nawiasach dzięki temu możemy użyć np komendy SVN co zamiast SVN checkout.