SVN ile çalışmanın dayanılmaz hafifliği…
SVN (Subversion) kaba bir tabirle sürekli güncellenen dosyalar için sürüm kontrol sistemi olarak ifade edilebilir. Başkaları nasıl kullanıyor bilmiyorum ama biz program geliştiricileri için hayat kurtarır mahiyettedir.
SVN ile proje dosyalarınızı güvenilir, yedekleri düzenli şekilde alınan bir sunucuda tutabilirsiniz. Çalışacağınız zaman bu dosyaların en güncel halini kendi bilgisayarınıza indirip gerekli güncellemeleri yapıp ilgili yorumlarınızla birlikte tekrar svn sunucunuza geri gönderebilirsiniz. Üstelik aynı projede çalışan birden çok kişi de kendi kullanıcı bilgileri ile bu işlemi yapabilir. Böylece kimin nereye ne şekilde ekleme çıkarma yaptığı gün, gün, saat saat bellidir. Dilediğiniz zaman dilediğiniz bir sürüme dönüş ya da inceleme yapabilirsiniz.
İşyerinde SVN ile çalışmak bizim için büyük bir nimet. Üzerinde kodlarınızı yazdığınız bilgisayarın başına herhangi bir iş gelse; disk bozulsa, virüs bulaşıp tüm dosyalarınız zarar görse üzülmeniz gereken tek şey sadece en son yazıp ‘commit’ etmediğiniz kısımlar olur ki genelde bunlar tüm projenin yanında oldukça az bir yer kaplar. Tabi bu kısımlar hayati kısımlar da olabilir ama, o zaman makinenize gözünüz gibi bakın ne diyeyim.
İşte bu rahatlığı evimde de kullanmak için uzun zamandır fırsat kolluyordum. İstediğim zaman erişebileceğim bir svn sunucum olsun istiyordum. Makinemi her formatladığımda sayıları giderek artan ve kontrolden çıkmaya başlayan proje yedeklerim için en iyi çözüm svn idi. Gerçi bu işi ücretli veya ücretsiz yapan başta Google ve SourceForge gibi onlarca site var fakat bilhassa bu saydıklarımda projeyi oluştururken ‘açık kod lisansınızı seçiniz’ şeklinde sorular sorulması beni işkillendirdi. Küçük de olsa ticari kodlarımın açık seçik olması taraftarı değilim. Aslında 3o küsür yaşında bir programcı olarak ‘açık kod’ nedir denince kafamda net bir cevap oluşması lazımdı ama malesef yok.
Ne diyorduk? Evet svn sunucu için uzun bir süredir bekliyordum. Nihayet kısa bir süre önce artık komut satırına da erişebileceğim bir ‘dedicaded (adanmış) sunucu’ya sahip olduk. Sahip olduk diyoruz ama pek tabi aylık bir bedel ödemek koşulu ile. 2005’den beri reseller (bayi) hesabına sahip olduğumuz HostGator’da bir kaç ay önce sponsorumuz hizlialisveris.com’un da desteği ile dedicaded sunucuya terfi ettik.
Dedicaded sunucuda tüm sunucunun kontrolü sizde oluyor. Reseller’a nazaran daha gelişmiş bir web arayüzünün yanında terminal bağlantısı da sağlayabiliyorsunuz tabi.
İşte bu fırsattan yararlanarak bugün biraz Google araştırması yaparak SVN’i inceledim. İşyerinde kullanıyorduk ama gerekli ayarlamaları proje sorumlumuz hallediyordu. Burda iş başa düşmüştü.
Sunucuda svn kurulu haldeydi. Kurulu olmasa da basit bir komutla hazır paketler sayesinde tek bir komutla kurulum yapılabiliyor. Faydalandığım dökümanlardan biri şu adreste: http://www.belgeler.org/howto/svn-nasil-kullanim.html
Svn için ana depo oluşturalım:
Birden fazla projeniz olabilir, hepsini tek bir ana depo altında toplamak daha düzenli olur kanaatindeyseniz bunun için /var/svn gibi bir klasör oluşturup depolarınızı bunun altında tanımlayabilirsiniz.
#mkdir /var/svn
#svnadmin create /var/svn/proje
Projenizin mevcut halinin /home/hcivelek/projem klasöründe olduğunu varsayalım. Bu klasörün içinde trunk, branches ve tags klasörlerini de oluşturup proje kodlarını trunk’ın içine kopyalayalım.
#cd /home/hcivelek/projem
#mkdir tags branches trunk
proje dosyalarınızı trunk dizinine taşımayı unutmayın!
Şimdi bu projem klasöründekileri yukarıda oluşturduğumuz svn deposuna katalım. Bunu yaparken svn’nin nimetlerinden faydalanarak bir de tarihe hayırlı olsun notu düşelim.
#svn import /home/hcivelek/projem file:///var/svn/proje -m ‘svn destekli ilk proje hayırlı olsun’
Bu komuttan sonra projenizin içindeki tüm dosyaların isimleri pıtır pıtır ekrandan geçerek depoya eklenecektir. En sonunda da ‘Commited revision 1’ mesaji aldıysanız işler yolunda demektir.
Aslında en önemli kısım bu kadar. Artık projeniz güvenilir bir sunucuda svn sistemine emanettir. /home/hcivelek/projem klasörünü silebilirsiniz bile (benim gibi acemiyseniz bir kenarda dursun canım, ne zararı var).
Şimdi svn’e gönderdiğimiz bu dosyaları çalışma ortamımıza nasıl indirebiliriz, ona bakalım.
Svn’deki projenizi aynı sunucuda başka bir klasöre çekmek için şu komut yeterli
#svn checkout file:///var/svn/proje/trunk baska_bir_klasor
Şimdi artık bu klasör içerisine girip dosyalarınız üzerinde çalışabilir, yeni dosyalar ekleyebilir, gerekiyorsa bazı dosyaları silebilirsiniz. (Dosya silmek için svn’in özel komutunu kullanmak gerekiyordu sanırım, silmek için çok acele etmeyin).
Dosyalarınızı güncellediniz ve artık bunları svn sunucuya göndermek istiyorsunuz. Şu komut yeterli;
#svn commit –message ‘filanca modüller eklendi’
Değişikliğe uğrayan dosyalar mesajınızla birlikte svn’e eklenecektir.
Svn ile çalışmak bazı alışkanlıklarınızı değiştirmenizi gerektirebilir. Bilhassa aynı projede bir kaç kişi çalışıyorsanız. Projeye dokunmaya başlamadan önce diğer elemanların yapmış olduğu güncelleme varsa onları çekmelisiniz ki olası bir çakışmaya neden olmasın. Bunun için update komutunu kullanmak yeterli.
#svn update
Svn işin içine girince proje klasörünüzdeki her bir alt klasörüe .svn klasörleri eklenir. İçlerinde tüm svn bilgileri, logları vs tutulan bu klasörlerin başına olurda bir hal gelirse diye ‘svn cleanup’ gibi komutlarla sistemi yoluna sokabiliyorsunuz. Detaylı bilgi için lütfen Google’da daha sıkı araştırma yapın. Biz genelde başımız sıkıştığında arama yapma metodunu tercih ediyoruz.
Proje klasörünüzdeki her bir alt klasöre eklenen .svn klasörlerinden arınmış bir şekilde kopya almak istediğinizde (ki projenin çalışacağı gerçek yerde böyle olmasını istersiniz) export komutunu kullanmak gerekiyor.
#svn export file:///var/svn/proje proje_dosyalari
Şimdi bu örneklerde svn makinesi üzerinde dosyalarımızın bir kopyasını oluşturup komut satırından svn’i nasıl kullanabileceğimize kabaca bakmış olduk. Fakat asıl yapmak istediğimiz masaüstümüzde svn’i kullanmak.
Svn sunucu üzerinde doğrudan komut satırından idare edilebildiği gibi masaüstünüzde Tortoise Svn gibi istemci programlarla ya da projenizi hazırlarken kullandığınız Eclipse gibi editörlerle de kullanılabilir. En etkin yöntemi bizce budur. Eclipse’de projenizi oluştururken svn kaynağınızı belirttiğinizde tüm svn işlemlerini kendi menülerinden kolayca halledebiliyorsunuz.
Svn kaynağı demişken hemen unuttuğumuz bir noktaya değinelim. Svn sunucuza masaüstünüzden erişebilmenin farklı yolları mevcut. Bunlardan biri apache üzerinden http:// protokolü ile, diğeri ise svn:// ya da svn+ssh:// protokolü ile erişmek. Apache ile erişmek için apache’nin mod_dav_svn modülünü kurmanız icab ediyor. Fakat bizim denemizde bu modül kurulmasına rağmen apache bu modüle ait dosyaları yüklerken bir hata verdi. Google’da araştırdığımızda o hatadan kurtulmak için apache’nin farklı parametrelerle yeniden derlenmesi icab ediyordu. Üzerinde bir sürü site barındıran bir sunucuda bu hayati işlemler boyumuzu aşacağı için biz diğer protokolleri kullanma yolunu tercih ettik. Kırmızı hapı seçecekler yazılarıyla bizi bilgilendirirlerse memnun oluruz.
Svn’in paketi ile birlikte gelen svnserve uygulaması arkaplanda deamon ya da servis olarak hizmet verebiliyor.
#svnserve -d
Bu şekilde svn sunucunuz hizmete hazır. Svn’e uzaktan bağlanmanın en kolay yolu ssh ile birlikte bağlanıp zaten mevcut olan kullanıcı bilgilerinizi girmenizdir.
Bizim kullandığımız Eclipse sürümünde işyerinde kullandığımdan farklı olarak svn desteği yoktu. Bunun için Eclipse’nin ‘Help/Install New Software’ menüsüne girip adres kısmına ‘http://subclipse.tigris.org/update_1.0.x/’ yazarsanız svn eklentisini buradan kurabilirsiniz.
Eclipse’e svn desteğini sağladıktan sonra menüden ‘File/New/Project/Svn/Checkout project from Svn’ seçeneğini seçip url kismina
svn+ssh://user@sunucu/var/svn/proje/
şeklinde yazdığınızda sizden kullanıcı adı ve parola bilgisi isteyecektir. Svn’e bağlandıkdan sonra gelen listeden sadece trunk klasörünü seçmeniz yeterlidir.
Svn ayarlama işlemi bittiğinde ‘Yeni proje sihirbazı ile devam et’ gibi bir seçenek karşınıza çıkıyor. Oradan ‘PHP project’i seçip svn kaynağınızı bu projenizin çalışma alanı olarak gösteriyorsunuz ve sabahın 3:14’ünde yazınızı bitiriyorsunuz.
Bir uyarı: Eğer hosting hesabınızda ssh erişimi yoksa svn’e bağlanırken “malformed network data” uyarısı alırsınız 🙂 benim gibi iki gün düşünürsünüz bu neden oldu diye :))))
Eclipse için svn plugininin güncel adresi: http://subclipse.tigris.org/update_1.6.x