Coding with Titans

so breaking things happens constantly, but never on purpose

Autorzy kodu przy przenoszeniu repozytorium z SVN do GiT

Dla niektórych może jest to i zbytnia perwersja, ale lubię, gdy używając jakiegoś narzędzia, stosuję się do sugerowanych przez nie konwencji. Dzięki temu wszystko to, co robię nie odstaje od siebie. I tak patrząc na repozytorium w SVN, każdy commit przypisany był do użytkownika systemowego i oznaczany po prostu jego loginem (a często i jakimiś magicznymi przy- i przedrostkami – wystarczy spojrzeć na przykład z codeplex.com: “SND\FeydRauth_cp”). GiT z kolei próbuje opatrzeć wszystko właścicielem w formacie “<login> <email>”.

Jak zatem przenosząc repozytorium utrzymać jednolite nazwy autorów tak, aby nie dało się odróżnić, która część pochodzi z czasów, gdy używany był jeden system kontroli wersji, a które już po przeprowadzce?

Odpowiedź jest bardzo prosta – użyć opcji “-A <nazwa_pliku_txt>” podczas klonowania repozytorium SVN, która zapewni translację autorów. W pliku tym zapisujemy reguły, każda w osobnej linii, w postaci:

<nazwa_autora_svn> = <nazwa_autora_git>

Czyli np.:

pawel = pawel <pawel@email.com>
pawelh = pawel <pawel@email.com>

Dodatkowo, jeśli nie zależy nam na jakiejkolwiek późniejszej synchronizacji możemy dodać również opcję “–no-metadata”, która zapobiegnie doklejaniu dodatkowych danych w komentarzach, które opisywałyby źródłowe commity SVN, już docelowo w GiT-ie.

Całe polecenie wygląda wtedy tak:

git svn clone svn+ssh://<svn_url> <local_name> -A authors.txt --no-metadata

Oczywiście zakładamy tutaj, że:

  • svn+ssh:// – to wykorzystywany schemat do repozytorium SVN (równie dobrze może to być samo svn:// lub http://)
  • svn_url – to pełny adres gałęzi, którą będziemy klonować
  • local_name – to nazwa lokalnego folderu, w którym zostanie utworzone repozytorium GiT
  • authors.txt – to nazwa pliku z regułami translacji autorów opisanymi powyżej.

Teraz pozostaje tylko upewnić się, że ustawiliśmy w konfiguracji GiTa ten sam login i email dla nowego autora i ładnie wypchnąć nowe repozytorium.