Tekrardan selamlar! Geçen iki sayıdır sürdürdüğüm “Tasarım Desenleri”ne şimdilik bir ara verip, bu sayı için bir başka ilginç konuyu, SVN olayını arkadaşım Aykut’la beraber sizinle paylaşmak istiyoruz.

SVN nedir?

Kalabalık bir proje grubunda çalışma durumunuz mutlaka olmuştur. Proje sürecinde fikirlerin ve çalışma tarzlarının çeşitliliği sorun yaratmıştır. Özellikle bir yazılım projesi üzerinde çalıştıysanız, proje belgelerinin oluşturulmasına ve özellikle düzeltilmesine haddinden fazla zaman ayırmak zorunda kalmıştınız. Proje elemanlarının elinde birbiriyle çakışan versiyonlar, her versiyonda farklı bir değişiklik, değişikliklerin ayıklanması, ... çalışmalarınızı adeta çileye çevirmiştir.

İşte bu noktada devreye SVN giriyor. SVN (Subversion), bir projenin dökümanlarının farklı versiyonlarının oluşturulmasına, saklanmasına ve düzenlenmesine olanak veren bir ağdır. SVN ilk kez CollabNet Inc. tarafından 2000 yılında başlatılmıştır. Asıl amacı CVS adlı bir başka sistemin ardılı olmaktır.

Proje çalışanları, üzerinde uğraştıkları belgeleri, kod dosyalarını, vs. düzenli olarak repository adını verdiğimiz, proje elemanları tarafından belirlenmiş bir veri havuzuna yollar (commit). En yeni versiyonu çalışma alanına aktarabilmek içinse güncelleme yapar (update).

Proje elemanları, çeşitli yazılımlar aracılığıyla (örn: TortoiseSVN) ya da IDE'lere gömülü özellikler aracılığıyla (örn: Eclipse IDE'de SVN için özel eklenti vardır) SVN sistemine dahil olurlar. Ana veri havuzu içinse bir sunucu gerekmektedir. Günümüzde SVN için veri havuzu sağlayan pek çok organizasyon vardır; Assembla (www.assembla.com) ve Google Code (code.google.com) bunlardan yalnızca ikisidir.

SVN'in faydaları:

  • Toplantılar haricinde sürekli iletişim sağlar.
  • Projenin en güncel ve doğru halinin tüm proje çalışanlarına verimli bir şekilde ulaştırır. Bu bağlamda yedekleme sorununu da büyük ölçüde halletmiş olursunuz. Çakışan versiyon olursabunun hakkında kullanıcıları uyarır ve düzenleme olanağı sağlar.
  • Zamandan tasarruf; bireysel çalışmalarınızı zaman kaybetmeden diğer çalışanlara iletebilirsiniz.

SVN'i en verimli şekilde kullanmanın yolları:

  • İyi bir görev dağılımı yapmak gerekir. İlk başlarda her grup elemanı, birbirinden ayrı modüllerin/parçaların geliştirilmesiyle uğramalıdır. Böylece birleştirme aşamasına kadar çakışma olasılığını ortadan kaldırmış oluruz. Birleştirme aşamasına gelindiğinde de mümkün olduğunca sade bir görev dağılımı olmalıdır.
  • Her grup elemanı, çalışmaya başlamadan önce güncelleme yaptığından emin olmalıdır. Bu şekilde çakışan versiyonların ortaya çıkması asgari seviyeye indirgenmiş olur.
  • Her grup elemanı, geliştirdiği kısmı düzenli bir şekilde veri havuzuna yollamalıdır.

Şimdi ise TortoiseSVN ve Google Code ile bir SVN örneğini inceleyelim.

Ana veri havuzunu oluşturma:

Önce Google Code'dan proje yaratıyoruz.

Ardından kaynak ayarlarından ana havuz adresine ve ana havuza bağlanmak için gerekli şifremize erişebiliriz. Tabii projede çalışacak diğer elemanları da proje özelliklerinde belirtmeliyiz.

Kullanıcının SVN ayarları:

TortoiseSVN'i bilgisayarımıza yükledikten sonra, herhangi bir dosyamızı “Create Repository” seçeneğiyle bir veri havuzu haline getirebiliriz.

Ardından üzerinde çalışacağımız her proje için ayrı bir klasör açmanız, ve bu klasörlere “SVN Checkout” özelliği ile hangi ana veri havuzuyla iletişime geçeceğini belirlememiz gerekir.

Veri gönderme

Çalışmamızın belli zamanlarında commit yapmamız gerekiyor. Veri havuzu klasörümüzün seçeneklerinden “commit”i seçip, hangi dosyaları ana veri havuzuna yollayacağımızı seçiyoruz.

Aktarım sırasında gerçekleşen tüm alt etkinlikleri görüntüleyebiliriz.

Veri havuzunu güncelleme:

Çalışmalarımızın uygun zamanlarında (özellikle de başlamadan önce) update yapmamız gerekiyor. Bunun için veri havuzumuzun “update” seçeneğini kullanırız.

Güncelleme sırasında herhangi bir belgede versiyon çakışması olursa program bizi uyaracaktır; böylece elimizdeki versiyonla ana havuzdaki versiyonu doğru bir şekilde birleştirebiliriz. Ayrıca kaybettiğimiz dosyalar olursa da onların yenilenmesini sağlamış oluruz.

Bir de Eclipse IDE ile SVN kullanımına göz atalım...

SVN, çeşitli yazılımlar aracılığıyla kullanılabildiği gibi Eclipse yazılım geliştirme ortamına gömülmüş bir özellik olarak da kullanılmaktadır. Eclipse’de SVN kullanarak yürüteceğimiz büyük ölçekli projemizin ilk safhasına günümüzde en çok rağbet gören veri havuzlarından biri olan Google Code’dan bir proje hesabı açarak başlayalım. Google Code’dan bir proje hesabının nasıl açıldığını, açtığımız bu hesap içerisinden nasıl bir veri havuzu adresi edinebileceğimizi Onur’un yazısından okuyabilirsiniz.

Eclipse yazılım geliştirme ortamının Help seçeneğini tıklayarak öncelikle yazılım güncelleştirmelerinin bizim için listeleneceği “Software Updates...” seçeneğini tıklıyoruz.

İlk olarak karşımıza gelecek “Software Updates and Add-ons” ekranına SVN plugininin URL’sini eklemek için “Add Site…” seçeneğine tıklıyoruz.

Belirecek “Add Site” ekranına vereceğim şu URL’yi yazıyoruz: http://subclipse.tigris.org/update_1.4.x

İşlemi onayladıktan sonra yazmış olduğumuz bu URL’nin “Available Software” kısmında ekli olduğunu göreceksiniz. Bu URL’nin yanındaki onay kutusunu işaretledikten sonra yan tarafta belirecek “Install…” butonuna tıklıyoruz.

Yükleme işlemi başarıyla gerçekleştikten sonra değişikliklerin uygulanabilmesi için Eclipse ortamını yeniden başlatmanızı öneririm.

Artık projemizde çalışan arkadaşlarımızın yapacağı değişiklikleri biz, bizim yapacağımız değişiklikleri de proje arkadaşlarımız SVN yardımıyla kolayca görebilecek. Projeyi beraber yürüttüğümüz arkadaşlarımız kendi proje versiyonlarını bizim değişikliklerimizi de katarak güncelleyebilecek veya kendi değişikliklerini bizlerin de görmesini SVN yardımıyla kolayca sağlayarak projeyi bir üst versiyona taşıyabilecekler. Şimdi veri gönderme ve veri güncelleme olaylarının Eclipse ortamında yazılım üzerinde nasıl yapıldığını görelim.

Yaptığımız değişiklikleri diğer proje çalışanlarına bildirmek, yeni verileri onlarla paylaşmak için SVN plugininin “Commit” özelliğini kullanıyoruz. Bunun için eğer arkadaşlarımızı projenin tamamında gerçekleştirilmiş değişiklerden haberdar etmek istiyorsak üzerinde çalıştığımız bu projeye sağ tıklayarak “Team” seçeneği altındaki “Commit” e tıklıyoruz.

Belirecek “Commit” ekranından değişiklik yaptığımız sınıfları görebiliriz. Buradan değişikliğini bildirmek istediğimiz sınıfları seçebilir ve yazacağımız herhangi bir açıklayıcı yorumla beraber yollayabiliriz. Böylelikle proje arkadaşlarımız yapılan bu değişikliklerin kapsamının ne olduğunu daha iyi anlamış olurlar.

Belirecek “Commit” ekranından değişiklik yaptığımız sınıfları görebiliriz. Buradan değişikliğini bildirmek istediğimiz sınıfları seçebilir ve yazacağımız herhangi bir açıklayıcı yorumla beraber yollayabiliriz. Böylelikle proje arkadaşlarımız yapılan bu değişikliklerin kapsamının ne olduğunu daha iyi anlamış olurlar.

Verilerimizi güncellemek içinse yine projeye sağ tıklayarak “Team” seçeneği altındaki “Update” e tıklıyoruz.

Eğer belgelerde versiyon çakışması varsa bunları “Synchronize” sekmesi altından rahatlıkla hangi belgelerde olduğunu görebiliriz. Böylece yapılan değişikliklerin ne olduğunu ve nerelerde olduğunu kolaylıkla anlayabiliriz.

Bir başka yazıda daha birlikte olmak üzere…

Kaynaklar: