Miałem okazję zapoznać się z trzema systemami kontroli wersji, Subversion, Bazaar i git (w tej kolejności). Każdy ma swoje wady i zalety, jednak ze wszystkich trzech dla mnie git jest najwygodniejszy i najsprawniejszy. Tak jak z Subversion, czy później z Bazaarem, tak i z gitem miałem początkowo problem by płynnie korzystać z jego możliwości, ale wygoda rośnie w miarę używania. Dla swojej (i być może innych) wygody, postaram się tutaj przybliżyć podstawowe komendy git'a a także odpowiedniki w dwóch pozostałych systemach kontroli wersji.
Ale najpierw zacznę od paru zdań na temat różnic pomiędzy oboma systemami. Czym różnią się od siebie te systemy?
Również do commitów (zapisów zmian) te trzy systemy podchodzą różnie. O ile dobrze pamiętam, w commitach svn wszystkie zmiany są dołączane automatycznie, podobnie jest w bazaarze. Zmiany te można pominąć. Natomiast git wymaga od nas zadeklarowania zmian, które chcemy załączyć, czy to jest dodawanie, zmienianie, czy usuwanie plików. Bywa to męczące przy dużej ilości zmian, ale z drugiej strony, urokiem repozytoriów rozproszonych takich jak Bazaar, czy git, są właśnie atomowe commity, a nie zbiorcze jak w Subversion.
W gicie można wyróżnić sześć podstawowych operacji umożliwiających przenoszenie zmian pomiędzy drzewami i repozytoriami.
Polecenie to tworzy nowe repozytorium. Odpowiednikiem tego polecenia w Bazarze jest bzr init (o ile mnie pamięć nie myli), a w Subversion... Subversion inicjuje się na centralnym serwerze, a lokalnie ściąga aktualną wersję za pomocą svn checkout.
Umożliwia utworzenie lokalnej kopii innego repozytorium. Polecenie to inicjuje repozytorium git we wskazanym miejscu i ściaga historię zmian z danego repozytorium "zdalnego". Odpowiednikiem w Bazarze jest bzr branch - jako, że w bazarze każde repozytorium to osobna gałąź, a w Subversion - svn checkout - kopiuje aktualną wersję kodu do wskazanego miejsca.
To polecenie służy to łączenia zmian z różnych gałęzi. Odpowiednikiem Bazaara jest bzr merge, z tym, że w bazaarze każde repozytorium jest gałęzią, natomiast Subversion... nie używałem go na tyle długo i dogłębnie, by zapamiętać. Chociaż pamiętam próbę tworzenia "gałęzi" w repozytorium svn.
To polecenie służy do ściągnięcia informacji o stanie zdalnego repozytorium. Dzięki temu git może wyświetlić porównanie pomiędzy repozytorium lokalnym, a zdalnym, ile różnych zmian posiada każde z repozytoriów, i czy łączenie przebiegnie bezboleśnie. Odpowiedników z Bazaara brak, w Subversion tym bardziej.
Służy do ściągania zmian z repozytorium zdalnego z konkretnej gałęzi. Odpowiednikiem w Bazaarze jest podobnie bzr merge, a w Subversion svn update/svn checkout.
Ostatnie z poleceń jest przydatne w przypadku scentralizowanej struktury repozytoriów. Służy ono do "popchnięcia" zmian z określonej gałęzi repozytorium lokalnego, na określoną gałąź repozytorium zdalnego (i ewentualne utworzenie gałęzi). git push umożliwia również popchnięcie tagów. Odpowiednikiem w Bazaarze jest bzr push, natomiast Subversion takiego odpowiednika nie posiada.