SVN’den Git’e Proje Taşımak


SVN önceki yıllarda kurumsal projelerin vazgeçilmezi olsa da, artık son yılların popüler versiyon takip sistemi Git’e olan göç talepleri daha da arttı. Bu yazımda sizlere bir SVN projesini; history, tag ve branch kaybı yaşamadan Git’e taşımak için izlediğim adımları anlatacağım.

İhtiyaç duyulan uygulamalar: git , subversion , git-svn
Ek olarak metin editörü ihtiyacı için: vim veya nano

0) Eğer işlem yapılacak işletim sisteminin kurulum depolarında git-svn eklentisi bulunamıyor veya kurulamıyor ise, Docker kurulu bir işletim sistemi üzerinde aşağıdaki komutlar ile Ubuntu terminali oluşturulabilir.

docker run -it --network=host ubuntu bash
apt update
apt install git git-svn subversion
apt install vim
vim yerine nano da metin düzenleme uygulaması olarak kurulabilir.
apt install nano

Örneğimizde, repository’nin adı proje olsun.

1) SVN projesi clone edilir.

svn checkout http://svn-adresi/svn/proje proje-svn
Karışıklık olmaması için proje dizininin sonuna -svn eklenmiştir.
Git-svn ile clone edilenin sonuna da -git eklenecektir.

2) Proje dizinine girilir ve mevcut commit sahiplerinin listesi oluşturulur.

cd proje-svn
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
mv users.txt ../
cd ..

3) SVN tipi olan kişi listesinin Git’e uygun olması için kullanıcı adlarına karşılık gelen e-posta, isim ve soyisimler ile revize edilir.

vim users.txt

Eğer isim soyisim çok önemli değilse, en azından e-posta adresleri tanımlanmalıdır. Aşağıdaki komut ile, SVN kullanıcı isimlerinin sonuna domain eklenilerek, e-posta formatı oluşturulabilir.

sed -i 's/>/@domain.com>/g' users.txt

Bu adımdan sonra proje-svn ile işimiz bitti. Sadece, history’de bulunan kullanıcıların listesini çıkarabilmemizi sağladı.

4) Git SVN plugin’i ile tekrar SVN clone edilir. Fakat bu sefer Git altyapısı ile indiririyoruz. Proje dizininin sonuna -git eklendi.

git svn clone http://svn-adresi/svn/proje --authors-file=users.txt --stdlayout --no-metadata --prefix "" proje-git

5) Tag, branch ve history için gereken çeviri yapılır.

cd proje-git
for t in $(git for-each-ref --format='%(refname:short)' refs/remotes/tags); do git tag ${t/tags\//} $t && git branch -D -r $t; done
for b in $(git for-each-ref --format='%(refname:short)' refs/remotes); do git branch $b refs/remotes/$b && git branch -D -r $b; done
for p in $(git for-each-ref --format='%(refname:short)' | grep @); do git branch -D $p; done
git branch -d trunk

6) Son olarak yeni repository’nin adresi eklenir ve push işlemi yapılması gerekir.

git remote add origin http://git-adresi/yeni/git-projesi.git
git push origin --all
git push origin --tags

Bahsettiğim 6 adım ile sorun yaşamadan onlarca SVN projesini taşımayı başarabildim. Eğer herhangi bir hata ile karşılaşır veya katkı yapmak isterseniz, yorumlar üzerinden paylaşabilirsiniz.


Read the original post on: SVN’den Git’e Proje Taşımak