[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: CVS =?ıso-8859-9?q?=D6nerisine?==?ıso-8859-9?q?=20=DDhtiya=E7?=



Selam hocam,

Valla ağzına sağlık. Biraz daha devam ettirebilirsek bu muhabbeti zaten hiç 
bir şey yapmadan, mailleri merge ederek :) dokuman oluşacak.

Mailin üzerine subversion'a biraz daha baktım cidden düzgün gözüküyor. Zaten 
Joey Hess de subversion kullanıyor hemen her yerde (Eleman kopmuş biridir 
bilmeyenler için, Debian'ın %15'ini o kotarıyor desem abartmış olur muyum 
acaba :)

Mailde verdiğin adresi ben de şiddetle öneriyorum:
http://svnbook.red-bean.com/html-chunk/ch02s02.html

Şimdiye kadar cvs'de locking mekanizması işime yarayacak gibi gözüküyordu. 
Ancak buradaki dezavantajların önemli bazıları, soruna odaklandığım için 
aklıma gelmemişti. İşyerinde yoğun olarak cvs kullanıyorum, kod ciddi 
boyutlara ulaştı bir sürü branch, tag var. Bazen merge işlemi zor oluyor 
(emacs'in ediff'inden başka yardımcımız yok) ama başka yolu da yok napalım.


.
Cum 03 Eki 2003 20:30 tarihinde, Recai Oktas şunları yazmıştı: 
> * Murat Demirten <murat@debian.org> [2003-10-03 09:53:42+0300]
>
> > Bu arada ben bir iki şey sormak istedim. Şahsen cvs'i beğeniyorum
> > eksikleri var ayrı. Özellikle branch, tagleme, branch üzerinden branch
> > vs. bir kere alışıldı mı kullanışlı. Subversion'da branch ve tag o
> > anki dizin yapısının kopyalanmasından oluşuyor anladığım kadarıyla. Bu
> > da çok yoğun bir projede binlerce dizin kopyası demek mi oluyor?
>
> Guzel bir soru :-)  Bak ben buna bir `Subversion' deyimiyle cevap
> vereyim: "Subversion'da koypalar ucuzdur".  Turkcesi tam uymadiysa
> Ingilizcesi su: "Subversion copies are cheap".  Neden ucuz?  Cunku
> svn'de olusturdugunuz kopyalar aslinda mevcut bir dizine isaret eder ve
> sadece yapilan degisikliklerin `rysnc'daki deltalara benzer sekilde
> saklanmasiyla ekstra bir alan kullanilmis olur.  Linux'da `ln' komutuyla
> olusturdugunuz hard-link'e benzer birsey bu.  Dikkat edilecek olursa
> -daha uygun bir tabir bulamadigimdan- "rsync delta"lari dedim, zira bu
> format bildigimiz diff'den daha farkli ve binary/text ayirdetmiyor.
>
> > Bir de asıl merak ettiğim locking mekanizması içi subversion'da bir
> > çözüm var mı?
>
> Bu `locking' konusunda sana cok iyi bir haber veremeyecegim.  Benim
> anladigim kadariyla Subversion'da *simdilik* CVS'deki
> "copy-modify-merge" modelinin aynisi kullaniliyor.  Neticede versiyon
> kontrol'u programlarinin cozmekle mukellef oldugu en temel ve zorlu
> problem budur.  Saniyorum gelecek surumlerde belki yeni algoritmalar
> icat edilebilir.  Bu konuyu Subversion kitabinda cok nefis aciklamislar,
> mutlaka bir goz atilmasini oneririm:
>
> 	http://svnbook.red-bean.com/html-chunk/ch02s02.html
>
> > Oldukça ümit vadeden bir proje, elemanlar ufak ayrıntılara dikkat
> > ediyorlar.  Mesela network trafiğini azaltmak için hem update hem
> > commit işlemlerinde diff'ler gönderiliyor. Cvs'te sadece update diff
> > üzerinden yapılıyor vb.
>
> Subversion'in Apache2 ile birlikte harikalar yarattigini soylemeliyim.
> Burada kritik terim Apache2'de kullanilmaya baslanan WebDAV/DeltaV
> protokolu.  Basitce tanimlamak gerekirse bu protokol -versiyon kontrolu
> de yaparak- butun bir ag'i Apache2 uzerinden bir dosya sistemi gibi
> kullanmanizi sagliyor.  Dosyalarin lokal veya remote olarak kaydedilmesi
> hususunda bir ayirim yapmiyor.  Nasil bir yenilik ile karsi karsiya
> oldugumuzun anlasilmasi icin bir ornek verecegim.  Simdi asagida bir svn
> deposuna (repository) ait bir bag veriyorum (subversion'in kendi kodu):
>
> 	http://svn.collab.net/repos/svn/
>
> Bu bagi, browserinizda acarak soyle bir dolasin etrafta bakalim :-)
> `trunk' dizininde gordukleriniz svn'e konulmus subversion kodunun son
> hali ve bunu gostermek icin baglandiginiz sunucu Apache2 + svn modulu
> disinda ozel hicbir sey kullanmiyor.  Tabii depoyu daha ayrintili gormek
> isterseniz is baska.  Bu is icin "subversion"i da destekleyen `viewcvs'i
> kullanacaksiniz.
>
> Yeri gelmisken bu dizin yapisinin yani `trunk/branches/tags'in ne
> olduguna degineyim.  Version kontrolu -guvenlik konusunda oldugu gibi-
> bir dizi calisma disiplini/aliskanliklari gerektirir.  Yani gelistirme
> modeliyle ilgili kafanizda olusmus bir model yoksa `svn' veya `cvs'den
> harikalar yaratmasini beklemeyin.  Dallanmalardan sonra, sira
> birlestirmeye (merge) geldiginde olusacak conflict'leri siz
> cozeceksiniz, `svn' bunu otomatik olarak cozemez ;-)  Iste bahse konu
> dizin yapilari bu gelistirme modeliyle alakali.  Herseyden once sunu
> belirteyim.  Bu dizin isimlendirmeleri ve hiyerarsisi `subversion'in
> dikte ettirdigi veya subversion kodunda dikkate alinan seyler degil.
> Ilk olarak Subversion kitabinda onerilen -dikkat sadece bir oneri- bu
> dizinler isinizi olaganustu derecede kolaylastiriyor ve disiplinize
> ediyor. [1]  Mesela soyle bir proje deposu:
>
> 	proje/
>
> 	------->
> 		trunk/
> 		branches/
> 		tags/
>
> * `trunk': Guncel ve kararli olan "mainstream" proje kodu burada.
>   Gelistiriciler dogrudan bu dizin uzerinde calisarak commit
>   yapabilirler.  Fakat yapilacak degisiklikler buyuk capta ise `trunk'in
>   bir kopyasi `branches'a alinarak orada calisilir ve daha sonra tekrar
>   `trunk'a merge edilir.
>
> * `branches': Cesitli sebeplerle `trunk'dan yapilan butun dallanmalar
>   burada.  Mesela burada projenin `unstable' hali gelistirilebilir.
>   Veya `tags' altinda release ettiginiz bir kodun bugfixleri de ilgili
>   `branch'da yapilir.
>
> * `tags': Diyelimki `trunk'daki kod artik yeterince stabilize oldu ve
>   dagitimina (release) karar verdiniz.  Bu is CVS'de mevcut kodu
>   tag'leyerek oluyordu.  Subversion'da *tag* diye ozel bir sey *yoktur*!
>   Fakat sizin bir dizine verdiginiz ozel bir anlam vardir.  Dagitimina
>   karar verdiginiz kodun `trunk'taki halini `tags' dizini altina
>   kopyaliyorsunuz (`tags/v1.2.0' gibi).  Yani `tags' dizini altindaki
>   dizinler siz ona bu anlami verdiginizden dolayi -trunk veya
>   branches'dan farkli olarak- zaman icerisinde *degismez*.  Dagitimi
>   yapilan v1.2.0'a ait buglar soz konusu ise o da basit.  Once
>   `tags/v1.2.0' dizininin bir kopyasini misal `branches/1.2.1' olarak
>   olusturuyorsunuz.  Ilgili duzeltmeleri yaptiktan sonra v1.2.1'i commit
>   edip `tags/1.2.1'e kopyaliyorsunuz.  Tabii bu degisiklikleri trunk'a
>   tasimak icin de `branches/v.1.2.1' ile `trunk'i *merge* ediyorsunuz.
>
> Umarim bu bilgiler `subversion' hakkinda yeteli bir on fikir vermistir.
>
> [1] `trunk/branches/tags' yapisiyla calismak icin `Joey Hess'in yazdigi
> kucuk ve mukemmel bir script var: `svnpath'.  Ben bu betigi cok sik
> kullaniyorum.  Kendisiyle yaptigim gorusmelerde bu betigi esas alan bir
> dizi yardimci betik daha hazirladik.  Ilgilenenler bu betiklere
> asagidaki `viewcvs' deposundan ulasabilirler:
>
>   	http://cvs.kitenet.net/trunk/bin/?root=joey
>
> --
> roktas



Reply to: