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: