Dec 272012
 

Bir önceki yazımda Git deposundaki kodu Subversion deposuna taşımayı anlatmıştım. Şimdi bunu ters yönde (asıl olması gereken yön :)) anlatayım dedim.

Subversion’ da kullanıcı bilgileri sadece kullanıcı adından ibaretken Git’te kullanıcılar tam isimleri ve e-posta adresleriyle tanımlıdırlar. Subversion’ daki commit bilgilerini Git’ e aktarırken, kullanıcı isimlerinin de doğru şekilde aktarılmaları gerekir. Aksi halde Subversion’ dan gelen tüm commitler kullanıcıadı@localhost.localdomain gibi isimlere sahip kullanıclar tarafından yazılmış görünecektir.

Git ile birlikte gelen git-svn aracı, aşağıdaki gibi basit bir “authors” dosyası ile Subversion’ daki commitlerin kullanıcı bilgilerini Git standardına uygun hale getirebilir:

yasar = Yasar Senturk <yasar@senturk.name.tr>
saban = Tosun Pasa <saban@tosunpasacokyasa.com>

Ekibinizde sadece birkaç geliştirici varsa bu dosyayı el ile çabucak hazırlayabilirsiniz. Ancak birçok geliştirinin katkıda bulunduğu bir projeden bahsediyorsak ve tüm kullanıcıların isimlerini bilmiyorsak, o zaman işleri şöyle kolaylaştırabilirsiniz:

$ cd /subversion/calisma/dizini/trunk
$ svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > ~/developers.txt

Bu tek satırlık ufak betik ile Subversion deposuna commit yapmış tüm geliştiricilerin listesi aşağıdaki gibi bir şekilde ~/developers.txt dosyasına yazılacaktır:

yasar = yasar <yasar>
saban = saban <saban>

Daha sonra bu dosyadaki isimleri düzenleyip yukarıdaki örnekteki şekle getirebilirsiniz.

Şimdi Subversion deposundaki kodu yeni bir Git deposuna aktarmaya başlayabiliriz:

$ cd /git/deposunun/yolu
$ git svn clone file:///subversion/deposunun/yolu --no-metadata -A ~/developers.txt -s .
Initialized empty Git repository in /git/deposunun/yolu/.git/
r1 = cebf7e08527ae3916cbbe73c1cdb54d62866a2fe (refs/remotes/trunk)
	A	index.php
r2 = ff02e7ad2b3841bb5e8240e13c74e170cfb2ed6e (refs/remotes/trunk)
	M	index.php
r3 = be7f08a5f0071a0d82a4403da4b607c6a2a43859 (refs/remotes/trunk)
	A	a.class.php
r4 = eb760cd1ded0832f6da7fc0ed5f364f91965b311 (refs/remotes/trunk)
Checked out HEAD:
  file:///subversion/deposunun/yolu/trunk r4

Şimdi Git’ e aktarılmış kodun geçmişine bir bakalım:

$ git log
commit eb760cd1ded0832f6da7fc0ed5f364f91965b311
Author: Yasar Senturk <yasar@senturk.name.tr>
Date:   Thu Dec 27 03:35:24 2012 +0000
 
    Class ornegi
 
commit be7f08a5f0071a0d82a4403da4b607c6a2a43859
Author: Yasar Senturk <yasar@senturk.name.tr>
Date:   Thu Dec 27 03:34:14 2012 +0000
 
    Zamani da yaz
 
commit ff02e7ad2b3841bb5e8240e13c74e170cfb2ed6e
Author: Yasar Senturk <yasar@senturk.name.tr>
Date:   Thu Dec 27 03:33:49 2012 +0000
 
    Ekrana merhaba yazdir
 
commit cebf7e08527ae3916cbbe73c1cdb54d62866a2fe
Author: Yasar Senturk <yasar@senturk.name.tr>
Date:   Thu Dec 27 03:32:55 2012 +0000
 
    Dizin yapisi

Görüldüğü gibi Subversion’ daki yasar kullanıcısına ait tüm commitler Yasar Senturk seklinde aktarılmış.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)