Cumartesi, Aralık 04, 2010

Versiyon yönetim sistemi olarak GiT kurulumu ve kullanımı

Uzun süredir şirket ve kişisel projelerimde Subversion'u (SVN) kullanıyorum. Genel anlamda SVN'den oldukça memnundum fakat branching ve merging işlemlerinin sıkıntılı olması ve projeler büyüdükçe önemli ölçüde yavaşlama yaşandığı için SVN'i GiT ile değiştirme ve var olan SVN repository'lerini GiT'e taşıma kararı aldım. GiT'in diğer versiyon yönetim sistemlerinden iyi olduğu noktaları http://whygitisbetterthanx.com/ adresinden detaylıca inceleyebilirsiniz. Benim açımdan önemli olanlarını şu şekilde sıralayabilirim;

  • GiT gerçekten ama gerçekten çok hızlı
  • GiT kaynak depoları disk üzerinde çok az yer kaplıyor
  • GiT ile branching ve merging işlemleri kolay ve hızlı
  • GiT offline olarak kullanılabiliyor
  • GiT distributed (dağıtık) olduğu için her bir geliştiricinin makinesinde proje bütün geçmişi ile birlikte tutulabiliyor. İlk bakışta bunun işlemleri yavaşlattığı ve disk israfı olduğu düşünülebilir fakat GiT'in oldukça etkin algoritmalar kullanması sayesinde bu sorunlar hiç yaşanmıyor. 
GiT komutlarıyla ve genel yapısı ile ilgili detaylı bigiye GiT'in resmi dokümantasyonundan veya ücretsiz Pro GiT  kitabından ulaşabilirsiniz. Bu makalede Linux Ubuntu yüklü bir sunucu üzerinde özel bir GiT repository'sini nasıl oluşturabileceğinizi ve bunu diğer geliştiricilerle nasıl paylaşabileceğinizi anlatmaya çalışacağım. Buradaki komutlar veya işlemler diğer Linux sürümlerinde veya Windows üzerinde cygwin yardımıyla ufak değişiklikler ile çalıştırılabilir.

GiT'i ve GiT üzerinde repository oluşturulması ve yönetilmesi işlemlerini kolaylaştıran gitosis programını kurmak için sırasıyla sudo apt-get install git (veya git-core) ve sudo apt-get install gitosis komutlarını çalıştırmamız gerekiyor. Kurulumlar tamamlandıktan sonra sudo add user --system --shell /bin/sh --gecos ‘git user’ --group --disabled-password --home /home/git komutunu çalıştırdığımızda gitosis'in çalışması için gerekli olan git kullanıcısı sisteme eklenecektir. 

Kendi GiT repository'imizi oluşturmaya başlamadan önce sunucu üzerinde yapmamız gereken son işlem ise gitosis'e GiT projelerini yönetecek geliştiricinin ssh public anahtarını tanıtmak.  İlk olarak GiT repository'lerini yönetecek geliştiricinin makinesi üzerinde ssh-keygen -t rsa komutunu çalıştırmamız ve oluşturulan public anahtarı sunucuya kopyalamamız (/tmp klasörünü tavsiye edilir) gerekiyor. Daha sonra ise sunucu üzerinde sudo -H -u git gitosis-init < /tmp/rsa_key.pub komutunu çalıştırdıktan sonra tanıttığımız ssh public anahtara sahip olan bilgisayar üzerinden bütün GiT repository işlemlerimizi yapabiliriz. (Sunucudan ayrılmadan önce /home/git/repositories/gitosis-admin.git/hooks/post-update dosyasının çalıştırılabilir olduğunu mutlaka kontrol edin)

Geliştirme için kullandığınız bilgisayar Linux ise GiT'i kurmak için kullandığımız komutları kullanarak, eğer Windows veya Mac os x ise http://git-scm.com/ adresinden ilgili programları kullanarak GiT'i kurabilirsiniz. 

Gitosis oldukça akıllı bir şekilde bize GiT kullanarak GiT repository'lerini yönetme imkanı sağlıyor. Bunun için gitosis-admin repository'sini aşağıdaki komutlarla kendi makinemize almamız gerekiyor.

cd /home/mhazer
mkdir gitosis-admin
git clone git@sunucu_ismi:gitosis-admin.git

Sonraki aşamada gitosis-admin klasörü altında gitosis.conf dosyasına aşağıdaki şekilde değiştirip sunucuya göndermemiz gerekiyor.

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = mhazer@Bim247

[repo myRepo]
gitweb = yes
daemon = yes
description = myRepo GiT
owner = Murat HAZER

[group myRepo_group]
members = mhazer@Bim247
writable = myRepo

gitosis.conf dosyasını yukarıdaki şekilde değiştirip kaydettikten sonra gitosis-admin klasörü altında 

git commit -am "yeni myRepo tanımları" 
git push .

komutlarını çalıştırdıktan sonra GiT sunucusu üzerindeki ilk değişikliğimizi de yapmış olacağız. Bu komutlardan sonra hâlâ yeni GiT repository'imiz sunucu üzerinde oluşturulmamış olacak.  Bunun için;

mkdir /home/mhazer/myRepo
cd /home/mhazer/myRepo
git init
git remote add origin git@sunucu_ismi:myRepo.git
git push origin

komutlarını çalıştırmamız gerekiyor. GiT push işleminden sonra sunucu üzerinde /home/git/repositories/myRepo klasöründe GiT repository'si gitosis tarafından oluşturulacak. Bundan sonra /home/mhazer/myRepo klasörü altında oluşturduğunuz veya değiştirdiğiniz dosyaları git commit ve git push komutlarıyla sunucuya gönderip diğer geliştiricilerle paylaşabilirsiniz.

Yeni geliştiricilere myRepo repository'sine erişim hakkı vermek için yeni geliştiricilerin makinelerinde ssh-keygen -t rsa komutunu çalıştırdıktan sonra oluşan ssh public anahtarlarını daha önce gitosis-admin altındaki keydir klasörüne kopyalamamız ve gitosis.conf dosyasını aşağıdaki şekilde değiştirip GiT sunucusuna göndermemiz gerekiyor. (yeni geliştiricinin ssh public anahtarının yeniDev@Bim211 olduğunu farz edersek)

copy yeniDev@Bim211.pub /home/mhazer/gitosis-admin/keydir 

[group myRepo_group]
members = mhazer@Bim247 yeniDev@Bim211
writable = myRepo

cd /home/mhazer/gitosis-admin
git commit -am "yeni geliştirici tanımı"
git push .

SVN repository'lerinin GiT'e taşınması ve online GiT repository sunucularından olan github üzerine ilerleyen günlerde ilerleyen günlerde bahsetmeye çalışacağım.