:::: MENU ::::

Subversion (SVN) Nedir? SVN Kurulumu

Subversion (SVN)

Subversion nedir ne değildir ne işe yarar biraz açıklamaya çalışacağım. Subversion bir sürüm takip sistemidir. Kısaca SVN olarak da adlandırılmaktadır.

Ortak bir depoda sürümlenmiş şekilde saklanan proje dosyalarını geliştiriceler kendilerine tanımlanmış kullanıcı adı ile çekebilirler. Kendi depolama alanına çekilen bu dosyalar üzerinde işlemler yapıp tekrar ortak depoya gönderebilirler.

Arada gerçekleşen tüm işlemler Subversion (SVN) sistemi trafından yönetilmektedir.Kurulumu oldukça kolay;

 


Komutu ile svn kurulumunu centos 5.*  makinemizde gerçekleştiriyoruz.

Subversion sistemi bir dizi katmanlardan oluşmuş istemci-sunucu uygulamasıdır. svnserve yazılımı bu sistemin sunucusu olarak görev yapar. svnserve istemcilerden gelen isteklerini yerine getir.

Subversion sisteminde versiyonlanması istenen projeler “Depo”-”Repository” olarak adlandırılan ana dizinlerde tutulur. Her yeni proje için bir “Depo” oluşturmak gerekir. “Depo” dediğimiz şey basit olarak svnverve yazılımın çalıştığı bilgisayardaki bir dizin ve onun içerisindeki alt dizinlerden ibarettir.

“Depo”ları doğru düzgün yönetmek için depoları da barındıracak bir ana dizin açmak mantıklı olacaktır. Subversion sunucunun çalıştığı bilgisayarın Linux tabanlı olduğunu kabul edersek, depoları barındıracak bu dizin /home/svn veya /var/svn dizinlerinden birisi olabilir.

Eğer svn dizini yoksa $ mkdir svn komut ile dizin oluşturulabilir. Benim tercihim /var/svn altında bu dizini oluşturmaktır. Subersion sistemini Windows işletim sistemi yüklü bilgisayarlarda çalıştıracaklar ise uygun bir sürücede dizin açıp “depo” lara ev sahipliği yapmasını sağlayabilirler.

şeklinde bir ana dizin oluşturup tüm depolarımızı bu dizinde oluştursak mantıklı olur.

Depolar sürümlemeye ihtiyaç duyan herhangi bir sınıf, modül, kütüphane veya proje olabilir. Neyi sürümlemek istediğinizle ilgili olarak kullanımınız şekillenecektir.

Eğer bir web geliştiricisi iseniz, geliştirdiğiniz her siteyi yönetebileceğiniz bir depo oluşturabilirsiniz. Eğer bir tercüme takımındaysanız ortaktercüme ettiğiniz dökümanların sürümlerini oluşturabilir takibini gerçekleştirebilirsiniz.

yukarıdaki şekilllerde depo oluşturabiliriz. SVN in veri depolama tipi olarak Bekereley DB veya FSFS dosya sistemini tanımlayabiliriz. FSFS tanımlarsak Berkeley DB yönetimi vs ile uğraşmamız gerekmeyecek.

SVN ile sürümlenecek proje geliştirilirken aşağıdaki şekilde bir dizin yapısı oluşturmakta fayda vardır. Bu bir zorunluluk değildir bununla birlikte SVN ile çalışırken kullanılan iyi ve yaygın bir alışkanlıktır.

Proje dosyalarını lokal depolama alanımızda [dolandırmadan söylemek gerekirse harddiskinizde ] proje_1_dizini ismli geçici bir dizine koyduğumuzu düşünelim.proje_1_dizini isimli geçici dizin altında 3 dizin daha oluşturduğumu gördünüz.

Bunlar: trunk, branch, tags. Bu kelimeler yaygın kullanım alışkanlığı olarak artık yerleşmiştir. Projemizdeki tüm dizin ve dosyaları trunk dizini altına kopyalayacağız.

trunk dizini projenin geliştirme safhasındaki halini tutmak içindir.

branches dizinini projenin bir alt dalı, şeklini tutmak için kullanabilirsiz. branches dizinin altındakiler tamamen bizim ne anlam yüklediğimiz ile ilgilidir. Alt test sürümleri, farklı dil versiyon görünümleri vsvs gibi anlamlar yüklenebilir.

/var/www/proje_1_dizini/trunk dizinine kopyalanır. Artık sıra kurduğumuz yapıyı Subversion (SVN) altına göndermeye geldi. Aşağıda önce proje_1_depo adlı bir depo oluşturuyoruz ardından projeyi subversion altına gönderiyoruz.

Burada proje_1_dizini yerine /var/www/proje_1_dizini şeklinde tam dizinde verilebilirdi.

Yukarıdaki komut çalıştırıldıktan sonra artık proje dosyalarını geçici olarak kopyaladığımız yerden (/var/www/proje_1_dizini) silebiliriz.

O dosyalara artık ihtiyacımız kalmadı çünkü SVN /var/www/proje_1_dizini altındaki yapıyı olduğu gibi kendi veritabanına kaydetmiş durumdadır artık. Bundan sonra, SVN deki proje_1_depo isimli depomuzu olduğu gibi veya herhangi bir alt dizinindeki tüm yapıyı istediğimiz klasöre çekebiliriz (checkout).

SVN deki herhangi bir depoyu bulunduğumuz dizine veya istediğiniz birdizine çıkartmak için şu komutu kullanabiliriz

yazilir.

eğer kullanıcı adı şifre gerekirse –username kullanıcıadı parametresi verilmelidir. localhost yerine IP veya alan adı yazılabilir

SVN sistemiyle iletişime girmek için birkaç protokol mevcut biz bu örnekde “svn://” protokolünü kullandık.

Mevcut protokoller aşağıdadır

“file:///” sunucunun bulunduğu yerel diskten doğrudan erişim içn kullanılır

“http://”  WebDav protokolü ile Apache üzerinden erişmek için kullanılır

https://” Bu protolok http:// ile aynıdır ama bilgiler SSL şifrelemesi ile iletilir

 “svn://” svnserve sunucusuna erişim için kullanılan temel protokoldür

“svn+ssh://” Bu protokol svn:// ile aynıdır ancak SSH tünelin ile veri iletilir. güvenli iletimdir.

 

checkout yaparken tüm depo veya sadece trunk dizini yapılabilir. Tüm deponun checkout edilmesi durumunda branches, tags ve trunk dizinlerinin hepsi indirilir ki bu durumda proje dosyalarının birden fazla kopyaları harddiske indirilmiş olur. Mantıklı olan trunk dizinini checkout yapmaktır.

checkout yaptıktan sonra dosyalar artık harddiskimizdedir ve istediğimizi yapabiliriz. Ancak checkout ile birlikte ekstra bir dizin gelir .svn adında. Tüm alt dizinlerde birer tane vardır. Dizin altındaki dosyalarla ilgili sürüm bilgilerini barındırır. Bir çok meta data mevcuttur içinde kesinlikle silinmemelidir. Yanlışlıkla silinirse #svn update  komutu ile yeniden oluşturulması sağlanır.

komutuyla oluşturulan her deponun kök dizininde authz, passwd ve svnserve.conf dosyaları vardır. Oluşurulan depoya erişim haklarını tanımlamak için svnserve.conf dosyası kullanılır.

Potansiyel değerler şunlardır.

1. anon-access = none|read|write # anonim erişimdeki hakları tanımlar

2. auth-access = none|read|write # kullanıcı adı ile erişimdeki hakları tanımlar

3. password-db = dosyadi # kullanıcı adı ve şifreleri tutan dosyadır

4. realm = realm-name # depoyu tanımlayıcı bir metin

ömer ve öner isimli iki kullanıcısı olan ve sadece bu kullanıcıların erişim hakkının olduğu, diğer kullanıcılara kapalı bir depo tanım örneği aşağıdadır.

svnserve.conf  dosya içeriği;

passwd dosya içeriği;

Gündelik kullanımdaki iş döngüsü ve kullanılan svn komutları şu şekildedir.

1. Üzerinde çalıştığınız kopyayı güncelleyin

2. Kopya düzerinde değişiklikler yapın. Dosya değiştirin dizin açın kopyalayın vsvs..

3. Yaptıklarınız hakkında bilgi alın

4. Yaptığınız değişklikleri geri alın. önceki bir sürüme geçin

5. Çakışmaları giderin, diğerlerinin yaptıklarıyla birleştirin

6. Yaptıklarınızı depoya gönderin

 HAZIR KULLANIMLIK KOMUTLAR

SVN deposundan lokal diskte bulunaln diziye proje dosyalarını çekiyoruz

SVN deposundan son güncel bilgiler lokal diske çekiyoruz

Lokaldeki SVN kopyasındaki dosyanın durumu hakkında bilgi alıyoruz

 

Dizindeki tüm dosyaların durumları hakkında bilgi alıyoruz (SVN kopyası)

1. A dosya1 # bu dosya SVN deposuna gönderilmesi için eklendi

2. C dosya2 # ’svn update’ komutu sonrası bu dosyada çakışma oluştu

3. D dosya3 # dosya depodan silinmek üzere ayarlandı

4. M dosya4 # lokal disktei dosyada değişiklik yapıldı

 

Lokal diskteki dosyada yapılan değişiklikleri geri alıyoruz. (SVN deposuyla içerik aynı hale gelir)

Yapılan değişiklikleri SVN deposuna gönderiyoruz. (SVN kopyası olan dizin içindeyken bu komut verilir. o dizin vealt dizinleri için geçerlidir. )

Çakışma olan bir dosyanın içeriği elle düüzeltildikten sonra çakışmanın giderilmesi için yapıyoruz

Lokaldeki ve depodaki dosya loglarını görüntüleyebiliriz.

Genel parametreler

 -r veya –revision revizyonNumarasi ==> belirtilen revizyon-versiyon üzerinde işlem yapar

-r M:N ==> M ile N revizyon numaraları arasını temsil eder

-v veya –verbose ==> daha detayli bilgi veri

–username kullaniciAdi ==> SVN komutu çalıştırıken kullanıcı adı belirtiyoruz

–password şifre ==> SVN komutu çalıştırırken şifre belirtiyoruz

–no-auth-cache ==> işlem yaparken şifre bilgilerinin tutulmasını engeller

Düzenleme yapılmış tüm dosyalar ve yapılmış değişiklikleri listeler.

3 nolu sürümle mevcut sürüm arasındaki farkı gösteriyoruz.

2 ve 3 nolu sürümler arasındaki farkı gösteriyoruz.

Deneme.txt dosyasının 2 nolu versiyondaki içeriğini gösteriyoruz.

Projem1 deposundaki dosyaların listesini verir. daha fazla ekstra bilgi istenirse -v veya –verbose eklenebilir.

400 nolu sürümdden yeni bir kopya oluşturur

Mevcut dosyaları 400 nolu sürüm ile günceller

.svn dizini olmayan temiz birkopya çıkartıyoruz

SÜRÜM-REVİZYON TANIMLAYICILARI

HEAD : en son (en genç) sürüm

BASE : lokaldeki dosyanın’svn update’ ile alınmış hali ifade eder. lokalde dosyada değişiklik olsa bile görmezden gelinir

COMMITTED : BASE den önceki veya ona eşit commit edilmiş halidir

PREV : COMMITED-1 e denk gelir

örnekler:

Son commit in logunu gösterir

Son komitle diskteki edit edilmiş tüm dosyaların farklarını gösterir

Dosya.txt nin diskteki update sonrası orjial hali ile SVN deposundaki son commit edilmiş halinin farkını gösterir

{Y-m-d} : belirtilen tarihe kadarki son revizyonu temsil eder. {Y-m-d 00:00:00} olarak işlem görür

{Y-m-d 18:30:00} ==> tam tarih belirtimi

1 ekim ile 7 ekim arasındaki logu görüntüler.

Sunucuyu çalıştırma komutumuz aşağıdadır.


Comments are closed.