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.