SVN başlangıç

İçindekiler

1.0 Önsöz
2.0 Giriş
    2.1 SVN nedir?
3.0 Yükleme
4.0 İlk kullanım
    4.1 Depo oluşturmak
    4.2 Depoya dosya eklemek
    4.3 Depodaki dosyalara ulaşmak
5.0 Sonraki kullanımlar
    5.1 Dosya eklemek
    5.2 Değişiklikleri svn sistemine kaydetmek
6.0 İstemci/Sunucu yapısı
    6.1 Anlatılan işlemleri istemci/sunucu yapısı ile yapmak
    6.2 Sunucu ayarları
       6.2.1 svnserve.conf dosyası
       6.2.2 Şifre dosyası
    6.3 svnserve ü başlatmak
7.0 Belgeler
8.0 Yapılacaklar

sürüm 1.1 - Temmuz 2006
sürüm 1.0 - Ekim 2005

1.0 Önsöz

Bu yazıda yazılanlar sonucu sisteminize bir zeval gelirse, sorumluluk kabul edilmez.

Yazıdaki hataları, önerileri, soruları ve/veya yazının oluşturduğu tepkileri bildirirseniz çok faydalı olacaktır. Can Kavaklıoğlu Ekim 2005.
Çetin Meriçli'ye inanılmaz hatayı (CVS'in bir kitle-değiştir-aç sistemi olduğu) düzelttiği için çok teşekkürler.

2.0 Giriş

2.1 SVN nedir?

SVN ("Subversion") CVS' in ("Concurrent Versions System") yetersiz kaldığı noktaları kapatmak için yazılmıştır. Aynı CVS gibi genelde birden fazla kişinin çalıştığı projelerde sürüm takibi için kullanılır.

Sürümleme sistemlerinin var olmasının sebeplerinden birtanesi, bir dosyanın aynı anda birden fazla kişi tarafından, birbirine ters değişiklikler yapması sorununa çözüm sunmasıdır. Diğer bazı sistemlerde kitle-değiştir-aç sistemi kullanılır. Bu sistemde bir kullanıcı bir dosyayı yazmak üzere sistemden aldığında, o dosya kitlenir ve başka kimseye değiştirilmek üzere verilmez. Hernekadar bu durum aynı anda birbiriyle çelişen değişiklik yapılması sorununa çözüm getirse de, bazı durumlarda, bir kişinin işini bitirmesi için bütün takımın beklemesi gerektiği için, zaman kaybına yol açabilmektedir. SVN kitle-değiştir-aç sistemi yerine kopyala-değiştir-birleştir yöntemini kullanır. Bu sistemde yine her kullanıcıya istediği dosyanın bir kopyası yollanır ancak dosya kitlenmez, yani ilk kullanıcı işini bitirmeden (yaptığı değişikleri SVN sistemine yollamadan), başka bir kullanıcı aynı dosyayı yazmak üzere sistemden alabilir. Daha sonra her kullanıcı sisteme yaptığı değişikleri iletirken, birleştirme işlemi uygulanır. Birleştirme işleminde kullanıcının yaptığı değişiklikler, kullanıcının o dosyayı aldığı tarihten beri yapılan değişikliklerle kontrol edilir. Eğer söz konusu dosyanın, kullanıcının yaptığı değişlikleri içeren kısmı, başka bir kullanıcı tarafından değiştirilmiş ise, sistem bu ikinci aynı alanda yapılmış değişikliğe izin vermez. Bu noktada aynı değişikleri yapan kişilerin aralarında anlaşmaları gerekir. Böylece kopyala-değiştir-birleştir sistemi bir dosyanın farklı yerlerinde birden fazla kişinin çalışmasına izin vererek, CVS' e oranla verim artışı sağlayabilir.

3.0 Yükleme

Debian Sarge sistemimizde SVN programını edinmek için, kök ("root") kullanıcı olarak aşağıdaki komutu verilmesi gereklidir.

# aptitude install svn

Bundan sonra herhangi bir hata mesajının çıkmaması yüklemenin başarılı olduğuna işaret eder.

4.0 İlk kullanım

4.1 Depo oluşturmak

Bir depo oluşturmak için aşağıdaki komut yeterlidir.

# svnadmin create depoadi

Bu komut başarıyla çalıştıktan sonra, bulunduğunuz klasörde depoadi isimli bir klasör göreceksiniz. Deponuz bu dosya içerisinde, SVN sistem bilgileri ile beraber saklanacaktır.

4.2 Depoya dosya eklemek

Aşağıdaki komut (depoadi klasörünün bulunduğu doğru adresi kullanarak) "." ile belirttiğiniz bulunduğunuz klasördeki dosyaları depoadi isimli deponuza kopyalayacaktır.
svn import . file:///home/kulanici/depoadi/
Kopyalama işleminden önce yazı programınız açılacaktır. Buraya yazdıklarınız kayıt ("log") işlevi görmektedir. Hiçbirşey yazmasanız da bir sakıncası olmayacaktır. İlk deneme için yazı programınızdan çıkıp, sorulan soruya devam ("continue") diyebilirsiniz. Ama ileriki zamanlarda buraya açıklayıcı bir tanım yazabilirsiniz. Dosya ekleme işlemi tamamlandıktan sonra

svn log file:///home/kullanici/depoadi/

komutuyla yazdığınız açıklamayı görebilirsiniz

4.3 Depodaki dosyalara ulaşmak

Yukarıdaki işlemleri yaptıktan sonra, deponuzdaki dosyaların son sürümlerine ulaşmak için

svn checkout file:///home/kullanici/depoadi/ dosyalarinkopyalanmasiistenenyer

komutunu kullanabilirsiniz. Daha sonra elinizdeki dosyalarla depodaki dosyaları karşılaştırmak için de şu komutları kullanabilirsiniz:

svn status depodakiDosyalarinKopyalandigiYer
svn status depodakiDosyalarinKopyalandigiYer -u
svn status depodakiDosyalarinKopyalandigiYer -v

status komutunun çıktıları hakkında daha fazla bilgi için şu komutu kullanabilirsiniz.

svn help status

"svn checkout ..." komutu, edindiğiniz dosyaların yanında .svn isimli bir klasör oluşturur. Bu klasör SVN sisteminin işlem yapabilmek için gerekli dosyalarını bulundurur (yani içlerinde neler olduğuna bakabilirsiniz, ama sakın değiştirmeyin!). ".svn" klasörünün diğer bir önemli özelliği de, normal şartlarda, bulunduğu klasörü "çalışan kopya" olarak işaretlemesidir. SVN işlemleri yapabilmek için ("svn ..." diye başlayan komutlar verebilmek için), herşeyden önce üzerinde çalıştığınız klasörün, "svn checkout ..." komutu ile edindiğimiz, bir "çalışan kopya" barındırması gereklidir.

5.0 Sonraki kullanımlar

5.1 Dosya eklemek

"svn checkout ..." komutu ile dosyaları edindiniz, bulunduğunuz klasörde yeni bir dosya oluşturdunuz ve bu dosyayı SVN arşivinize eklemek istiyorsunuz. Bunun için önce durumumuzu görelim. Çalışan kopyanın bulunduğu klasörde (eklediğiniz dosya da çalışan kopyanın bulunduğu klasörde olmalı):

svn status

cevap olarak da, şöyle birşey gelmeli:

?      eklemekistediginizdosya

"svn help status" komutuna verilen cevaptan görebileceğimiz gibi, "?" o satırda belirtilen dosyanın SVN sistemine dahil olmadığını belirtir. Diğer boş alanlar ise şuanda gerekli olmayan başka işaretler için ayrılmıştır. Şimdi bu dosyayı SVN sistemine eklemek için şu komutu verelim:

svn add eklemekistediginizdosya

cevap olarak da, şöyle birşey gelmeli:

A    eklemekistediginizdosya

Buradaki bir soru şu olabilir, "SVN nereden biliyor, nereye eklemek istediğimi?". Çalışan kopyanın bulunduğu klasörde olduğumuz için, SVN programı ".svn" klasöründeki bilgilerden, nereye eklemesi gerektiğini bulabiliyor.


Dikkat edilmesi gereken bir nokta, önceki bölümdeki "cvs import ..." işlemi ile "cvs add ..." işleminin arasındaki farktır. "import" seçeneğinde belirtilen dosyalar sisteme hemen eklenirken, "add" seçeneğinde dosyalar ancak bir dahaki sisteme kaydetme işleminden (5.2) sonra sisteme ekleneceklerdir. Diğer yandan "import" seçeneği için
svn import . file:///home/kulanici/depoadi/
gibi uzun bir komut yazmak gerekirken, "add" seçeneği için

svn add eklemekistediginizdosya

gibi daha yazması kolay bir komut vermek yeterlidir. "import" seçeneği SVN sistemi yeni oluşturulurken bir komutla bir sürü dosya eklemek için, "add" ise günlük kullanımda daha etkilidir desek yanlış olmaz sanırım.

5.2 Değişiklikleri svn sistemine kaydetmek

SVN sisteminde istediğimiz değişiklikleri yaptıktan sonra ("add" ile dosya eklemek, var olan dosyalarda içerik değişikliği, vb.), dosyaların yeni hallerini sisteme yollamak için, çalışan kopyanın bulunduğu klasördeyken, şu komutu vermemiz yeterli:

svn commit

Böylece kurma zahmeti bitmiş ve SVNnin kolay kullanımının tadına bakmaya başlamış oluyoruz.

6.0 İstemci/Sunucu yapısı

6.1 Anlatılan işlemleri istemci/sunucu yapısı ile yapmak

Buraya kadar yaptıklarımızın hepsi bir makine üzerindeydi. Eğer SVN sistemini sunucu/istemci yapısıyla kurmak istersek, o zaman kurulum işlemlemini sunucuda, kullanım işlemlerini de istemcide yapmamız uygun olacaktır. 4.1 deki kurulumu sunucuda aynen yaptıktan sonra, istemci bilgisayarımızda da 4.3 de belirtilenleri yapmamız gereklidir. Yanlız aradaki tek fark,

svn checkout file:///home/kullanici/depoadi/ dosyalarinkopyalanmasiistenenyer

satırındaki file:/// bölünde. SVN sistemi yerel bilgisayarımızda değil de, başka bir bilgisayarda kurulduğu için, file:// yerine, svn protokolünü kullanmamız gerekiyor. Yani komutmuz şöyle oluyor:

svn checkout svn://UZAKTAKiBİLGİSAYAR/home/kullanici/depoadi/ dosyalarinkopyalanmasiistenenyer

UZAKTAKİBİLGİSAYAR olarak, IP adresi yada sisteminizde ayarlı ise uzaktaki bilgisayarın ismini (ya bir ağ adı -domain- yada /etc/hosts dosyasında belirtilen bilgisayar adı) kullanabilirsiniz.

Bu durumdaki gibi istemci bilgisayarda file:// protokolüne gerek duyulduğu zaman svn:// protokolünü kullanarak, tamamiyle aynı komutları uygulayabilirsiniz.

6.2 Sunucu ayarları

Sunucuyu istediğimiz şekilde çalıştırabilmek için, 4.1 de oluşturduğumuz klasörün içindeki .svn klasörünün içinde bir takım ayarlar yapmamız gereklidir.

6.2.1 svnserve.conf dosyası

Bir örnekle açıklamak gerekirse, .svn/conf/snvserve.conf dosyası şöyle olabilir:

[general]
anon-access = none
auth-access = read
password-db = passwd
realm = My First Repository


Dikkat edilmesi gereken bir nokta, satırların başında fazladan boşluk bulunmaması gerektiğidir.

Bu dosyada anlatılan şudur:

İzin belirten satırlar:
anon-access = none : anonim (kullanıcı adı ve şifre belirtmeden, "anonymous") girişe izin verilecek mi? none seçeneği verilmeyeceğini bertiyor.
auth-access = read : kullanıcı adı ve şifreyle yapılan girişe izin verilecekmi ("authorized")? read seçeneği, sadece okumak amaçlı izin verileceğini belirtiyor.
İzin belirten satırlarda kullanılabilecek değerler şunlardır: none (izin yok), read (okuma izni) ve write (okuma ve yazma izni)

Şifre dosyası belirten satır:
password-db = passwd : Şifre dosyasının yerini belirtir. Eğer verilen konum (örnekte "passwd") "/" karakteri ile başlamazsa, verilen konum "conf" dosyasından başlanarak aranacaktır, yani eğer verdiğiniz dosya ismi / ile başlamıyorsa, conf klasörünün içinde olmalıdır.

realm = My First Repository : Satırı hangi SVN sistemlerinin aynı kullanıcı ve şifreleri kullanacağını belirtir. Bu anahtarda aynı değere sahip olan sistemler, aynı şifre dosyalarına sahip olmaları şarttır, böylece birden fazla sisteme tek bir kullanıcı adı/şifre ile giriş yapılabilir.

6.2.2 Şifre dosyası

Şifre dosyası, svnserve.conf dosyasında belirtilen konumda olmalıdır. Örnek bir şifre dosyası:

[users]
kullaniciadi = sifre
kullaniciadi = sifre2

Bu dosya da kullanıcıları ve şifrelerini belirtir. Şifre tanımlanması, bir oturumda, sunucuya yapılan ilk istekte şifre sorulmasını sağlar. Bir oturum içerisinde sonraki istekler için şifre girmeye gerek yoktur.

6.3 svnserve ü başlatmak

Sunucumuzun SVN isteklerine cevap verebilmesi için svnserve programını çalıştırması gereklidir. svnserve program çeşitli yollarda çalıştırılabilir. Ne şekilde çalışırsa çalışsın, doğru olarak çalışan bir svnserve, svnserve.conf dosyası doğru olarak ayarlanmış bütün SVN sistemlerine gelen istekleri doğru olarak karşılayacaktır.

svnserve -d

komutuyla başlattığınızda, program art alan süreci olarak başlayacaktır.

svnserve -X

komutuyla başlattığında, sadece ilk gelen istek cevaplandıktan sonra, svnserve kapanacaktır.

7.0 Belgeler

http://svnbook.red-bean.com/en/1.1/index.html
man svnserve
man svnserve.conf

8.0 Yapılacaklar

Kullandıkça öğrenilenler yazılacak.