GIT-SVN, czyli połączenie dwóch światów

Author: Wojtek Sznapka (wojciech.sznapka) | sierpień 19th, 2010
avatar

SVN jest jednym z najpopularniejszych i najpowszechniej używanych systemów kontroli wersji w dzisiejszych czasach. Nie oznacza to jednak, że jest rozwiązaniem najlepszym. Coraz większą popularność zyskują rozproszone systemy kontroli wersji, takie jak Git, Mercurial czy Bazaar. W tym artykule skupimy się na Gicie, który został stworzony przez Linusa Torvaldsa, w celu wersjonowania kernela Linuksa (zastąpił BitKeepera). Nie sposób wymienić wszystkich zalet, ale można wymienić kilka projektów, które go używają, co pokaże jego pozycję na rynku: Andorid, Arch Linux, Fedora, Gimp, Gnome, jQuery, OpenSuSE, Perl, Ruby On Rails, Wine, X.Org.

Poniżej pokażę rozwiązanie następującego problemu: „jestem programistą, znam i lubię Gita, ale w mojej firmie używa się SVNa”. Z pomocą przychodzi rozszrzenie git-svn, które umożliwia obustronną synchronizację repozytoriów. Rozpoczynamy od instalacji w systemach z rodziny Debian:

sudo apt-get install git-svn

Następnie inicjalizujemy repozytorium:

mkdir repo
cd repo
git svn init svn://repo.path/trunk
git svn fetch -r HEAD

Po tych czynnościach w folderze repo mamy już źródła naszego projektu. Możemy przystąpić do kodowania. Standardowo procedura nie różni się od normalnego używania Gita (czyli branch’owanie, rebase’y, mergowanie). Jedynie dochodzą dwie komendy którymi synchronizujemy się z repozytorium SVN:

git svn rebase

Pobiera najnowsze zmiany z repozytorium SVN do gałęzi master (odpowiednik svn update).

git svn dcommit

Wysyła nasze najnowsze zmiany z gałęzi master do repozytorium SVN (odpowiednik svn commit).

Warto jeszcze nadmienić o często spotykanej metodyce pracy z Gitem, tzw. ticket-workflow. Korzystając z aplikacji zarządzania zadaniami, takiej jak Jira lub Trac, każde zadanie ma swój numer. Dla każdego zadania tworzymy osobny branch w Gicie o nazwie TICKET_NR-krotki-opis. Dzięki temu możemy łatwo przełączać konteksty, jeśli przyjdzie nam nagle pracować nad innym zadaniem, a także porządkować commity przez spłaszczanie ich przy mergowaniu do gałęzi master. W naszym branchu na zadanie commitujemy do woli, a mergując do mastera używamy opcji squash, która stworzy nam jeden commit. Można też użyć mechanizmu rebase z opcją interactive, dzięki któremu możemy grupować lub reorganizować commity.

Powyższe rozwiązania zostały sprawdzone w praktyce i sprawowały się bardzo dobrze, obecność SVN była praktycznie nieodczuwalna w całym procesie :-)

Więcej informacji o samym Gicie znajdziesz w artykule Konrada: GIT-owy piątek z XSolve

Tags: , , ,

Podyskutuj na ten temat:

One Response to “GIT-SVN, czyli połączenie dwóch światów”

  1. avatar developer pisze:

    treściwe i przydatne. big thx

Leave a Reply