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 <[EMAIL PROTECTED]> [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

