Migracja repozytorium SVN do git

Młodsi stażem programiści pewnie tego nie pamiętają, ale kiedyś synonimem systemu kontroli wersji był Subversion. W dziewięciu na dziesięć przypadków podczas rozmowy kwalifikacyjnej należało się wykazać znajomością SVN-a.

Z tamtych czasów zostało mi kilka projektów w SVN-ie. Większość z nich już od dawna nie funkcjonuje, ale kilka wciąż żyje, np. acp czy ta strona. Raz na ruski rok coś w nich poprawiam, choć ze wstydem przyznaję, że robiłem to wprost na serwerze, bo przy wymianie domowego serwerka parę lat temu już nawet nie stawiałem serwera Subversion. Teraz jednak postanowiłem zrobić z tym porządek i przenieść kod do gita.

Serwer Subversion

W moim wypadku pracę musiałem rozpocząć od postawienia serwera Subversion z danymi z kopii zapasowej. Jeśli masz działający serwer możesz od razu przejść do następnego kroku.

Wszystkie poniższe polecenia wydawałem jako root.

Pliki skopiowałem do katalogu /var/svn. Następnie zainstalowałem subversion poleceniem:

aptitude install subversion

Następnie utworzyłem grupę systemową subversion:

groupadd subversion

dodałem do niej mojego użytkownika:

addgroup michal subversion

zmieniłem właściciela wszystkich plików i katalogów na roota i utworzoną wcześniej grupę subversion:

chown -R root:subversion /var/svn

a w końcu zezwoliłem na odczyt i zapis rootowi i członkom grupy subversion:

chmod -R 770 /var/svn

Po wykonaniu tych kroków repozytorium SVN powinno już działać. W ramach testu można wypisać zawartość projektu:

svnlook tree /var/svn/moj-projekt/

Mapowanie autorów

Ten krok jest opcjonalny. Zaletą jego wykonania jest możliwość zmapowania autorów z SVN-a do na autorów z gita.

Na początek pobrałem pobrałem kod z repozytorium do katalogu moj-projekt-svn:

svn checkout file:///var/svn/moj-projekt/trunk moj-projekt-svn

Listę autorów z repozytorium Subversion należy wyciągnąć wydając poniższe polecenie w katalogu z repozytorium SVN:

svn log --quiet | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq

Efektem jego działania będzie lista w postaci:

jkowalski
mdurys

Na jej podstawie należy przygotować plik tekstowy w formacie:

jkowalski = Jan Kowalski <jan@kowalski.pl>
mdurys = Michał Durys <michal@durys.pl>

Migracja z SVN do git

Na początek należy zainstalować narzędzia potrzebne do tej operacji:

aptitude install git-core git-svn ruby
gem install svn2git

Następnie należy utworzyć katalog, w którym znajdzie się repozytorium git (powiedzmy moj-projekt-git) i będąc w nim wydać polecenie:

svn2git file:///var/svn/moj-projekt --authors ~/projects/acp-authors.txt

Polecenie utworzy repozytorium git zawierające pełną historię zmian z SVN-a. Z takim repozytorium można już pracować jak z normalnym repozytorium gita, np. można je też wypchnąć na GiHuba albo innego Bitbucketa.

Źródła:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *