Strona główna » Blog » Git kontra SVN

Git kontra SVN

Dwa najbardziej znane systemy wersjonowania kodu to Git oraz SVN, przy czym git ostatnimi laty zyskał na widoczności. Może nawet stał się jakimś rodzajem “standardu”. Ale czy Git jest lepszy niż SVN? Niektórzy mówią, że żaden z tych systemów nie jest lepszy, lecz że są po prostu różne. Hmm, no tak, są plusy i minusy każdego z nich. Tym nie mniej Git ma kilka zalet, które mogą przeważać szalę.

Różnica

Istotną różnicą między tymi systemami jest to, że przenoszenie zmian z lokalnego komputera na serwer odbywa się różnością ilością etapów: w SVN jest to jeden etap, czyli jeżeli dokonałem jakichś zmian w kodzie to wykonuję pojedynczy “commit” i zmiany te zostaną zapisane na serwerze, a w Git są to dwa etapy: najpierw zmiany zapisuję do lokalnego repozytorium a dopiero później z lokalnego repozytorium “wypycham” je (“push”) na serwer. Niby nic nadzwyczajnego, ale pozwala to po pierwsze na pracę “offline” a po drugie zmiany wypychane na serwer nie muszą być dokładne tym samym zbiorem zmian, które zapisaliśmy w lokalnym repozytorium – np. możemy pominąć wszystkie zmiany, które były ściśle robocze i wprowadzanie ich do głównego serwera nie ma sensu albo nawet może być szkodliwe.

Przykład

Oto przykład: tworzę pewne oprogramowanie i akurat zajmuję się taką jego skomplikowaną częścią, że chciałbym często móc zapisywać swoją pracę i wedle potrzeby móc później wykonać kilka kroków wstecz, gdy stwierdzę, że kierunek, który obrałem, jest jednak niewłaściwy. Jeżeli korzystam z SVN to mogę nie chcieć “commitować” każdego mojego kroku na serwer, bo później będzie to kłopotliwe, aby wykonywać te kroki wstecz – a ponadto mogę zmylić innych programistów ze mną współpracujących albo nawet zapisać w ten sposób kod, który w ogóle się nie kompiluje poprawnie. W związku z tym mając SVN mogę zastosować takie ręczne wersjonowanie lokalne, czyli edytując jakiś plik, załóżmy że “my_code.cpp”, mogę jego różne wersje zapisywać z dodatkowym numerem w rozszerzeniu, czyli “my_code.cpp” to będzie wersja aktualna, “my_code.99.cpp” to wersja pierwsza, “my_code.98.cpp” to wersja druga itd.

W przypadku korzystania z Git nie ma potrzeby czynić żadnego ręcznego lokalnego wersjonowania, bo mamy do tego lokalne repozytorium. I to, co na nim wykonamy, wcale nie musi jeden-do-jednego być wypychane na zdalny serwer. Gdy już więc wykonam wiele razy ruch “do-przodu” i “do-tyłu” w moich edycjach kodu, to ostatecznie mogę wypchnąć na serwer tylko najlepszą serię zmian albo nawet tylko jej ostateczny efekt.

W swoich bardziej zaawansowanych możliwościach git pozwala uporządkować tę pracę jeszcze bardziej poprzez zarządzanie gałęziami, które także może dziać się lokalnie.

Małe a cieszy

Z innych zalet Git podobają mi się małe smaczki, np. jest tylko jeden ukryty folder “.git” a nie ogromna ilość ukrytych folderów “.svn”. Poza tym system zdaje się być dosyć szybki i sprawny. Natomiast w zestawieniu z SVN można odczuć jego złożoność, która czasami może niepokoić albo zniechęcać. SVN jest zwyczajnie prostszy i być może w pewnych warunkach – szczególnie przy pracy indywidualnej – będzie przyjemniejszy. Wydaje mi się też, że oba systemy można próbować stosować równolegle. Może się to wydać nadmiarowe, ale tutaj patrzyłbym przede wszystkim na system obrany przez programistę/zespół i jego lub ich wygodę i efektywność pracy.

Dodaj komentarz