9

Yakın bir zamanda iki versiyon kontrol sistemi arasında birkaç gidip gelme yaşayınca bir karşılaştırma yazmak farz oldu. Önce bilmeyenler için versiyon kontrolün bir tanımını yaparak başlayalım. Versiyon kontrol kısaca, uygulamanızın kaynak kodunun yönetimini sağlayan uygulamalardır. Yazdığınız kodların güvenilir bir şekilde saklanması, versiyonların takip edilmesi, kodun gelişimine katkıda bulunanların ve kodun kontrol altında tutulması gibi ihtiyaçları gidermek için ortaya çıkmıştır. Kodunuzu takımlar halinde geliştiriyorsanız, kod paylaşımını kolaylıkla yapabilir, revizyonları kontrol edebilirsiniz. Kodun geçmiş sürümleride saklandığı için kodunuzun istediğiniz bir sürümüne geri dönebilirsiniz.

Bu kadar ön bilgiden sonra karşılaştırmamıza dönelim. Birde hatırlatayım, piyasada daha birçok sürüm yönetim sistemi vardır.

Öncelikle biraz tanıtım :)

TFS (Team Foundation System)

TFS (Team Foundation Server) Microsoft’un sürüm yönetim sistemi. TFS Visual SourceSafe’in (yoksa source unsafe’mi demeliydim!) geliÅŸtirilmiÅŸ versiyonu. Microsoft artık source safe’e destek vermiyor. TFS komple bir çözüm olarak geliyor. Sunucu kısmını bir sunucu bilgisayar üzerine kurduktan sonra gerekli ayarlamaları yapıp istemcilerden baÄŸlanabiliyorsunuz. Piyasada Microsoft’un kendi istemcisi haricinde (ki tahmin edebileceÄŸiniz üzere microsoft’un istemcisi Visual Studio üzerine tam entegre oluyor) birkaç istemci var. Microsoft’un istemcisi Visual Studio Team  System. Bu sayede Visual Studio kullanmayanlarda TFS kullanabilirler. Gerçi, TFS client power tools’u kurduÄŸunuz zaman Windows Gezgini üzerinden de iÅŸlem yapabiliyorsunuz ama neyse.

SVN(Subversion)

SVN ise Collab firmasının açık kaynak kodlu sürüm yönetim sistemi. Gerçi yakın zamanlarda el değiştirdiği için akıllarda acaba ücretli mi olacak sorusu dolaşıyor. SVN normalde komut satırından kullanılıyor. Fakat Tortoise SVN veya (Visual Studio için) AnkhSVN gibi birçok ek yazılımla bu sorun ortadan kalkıyor. Bu yazılımlar oldukça kabiliyetli.

Peki bu ikisinin ne farkları var?

  • TFS içerisinde komple bir proje geliÅŸtirme aracı barındırıyor. Takımdaki elemanlara görev atayıp onları yönetebiliyorsunuz. Bu ÅŸekilde teoride kodun kontrolüyle bunları baÄŸdaÅŸtırıp iki iÅŸ yapmaktan(iÅŸi yaptıktan sonra birde gidip proje yönetim aracına bunu iÅŸlemekten) kurtuluyorsunuz.  Ayrıca her araç tek bir yerden ulaşılabilir oluyor. TFS ayrıca Microsoft’un Ofis paketiyle ve Project aracıyla tam uyumlu. SVN’in bildiÄŸim kadarıyla böyle bir özelliÄŸi bulunmuyor.
  • TFS(Sunucu ve tabiki VS Team System) sadece Windows iÅŸletim sistemlerinde çalışıyor. SVN’i ise birçok sisteme kurabilirsiniz.
  • TFS ve SVN aÄŸ veya internet üzerinden (http veya https) kullanılabiliyor. İki sistemde TCP/IP altyapısına sahip. Yanlız TFS için yanında SharePoint arayüzü geliyor. Bu arayüzü İzmir’den bir Türk firması yazmıştı. Birkaç yıl önce Microsoft bünyesine geçtiler. Bu arayüz üzerinden istenilen tüm proje yönetim iÅŸlemleri gerçekleÅŸtirilebiliyor.
  • TFS kendi içerisinde bazı örnek klasör tanımlamalarına sahip(örneÄŸin dökümanlar gibi) SVN’de ise elle bir klasör oluÅŸturmanız gerekiyor.
  • SVN içerisinde de, TFS içerisinde de dökümanların önceki sürümlerini inceleme mekanizması mevcut. Yanlız SVN’in son sürümü Office 2007 dosyaları için bu özelliÄŸi aÅŸmış bir hale getiriyor. TFS’te ise pek kullanışlı deÄŸil.
  • İki sistem üzerinde kod göndermek veya güncellemek için belirli kurallar (örneÄŸin, kodun en az bir kere derlenmesi) koyabiliyorsunuz.
  • SVN kod üzerinde offline TFS ise Online çalışmaya imkan veriyor. Bunun anlamı ÅŸu, siz SVN üzerinde kodu toptan üzerinize alıyorsunuz ve kendi localinizde çalışıyorsunuz(Update). İşiniz bittiÄŸi zaman sunucuya gönderebiliyorsunuz(Commit). TFS üzerinde ise sunucu üzerindeki kodu düzenlemek için üzerinize alıyorsunuz (Check Out). Sonra düzenleyip gönderiyorsunuz (Check In). Yani TFS lock-modify-unlock (üzerine al, deÄŸiÅŸtir, bırak) sistemini kullanıyor. EÄŸer TFS üzerinde merge’e (iki kiÅŸinin aynı dosya üzerinde çalışması durumunda yapılan deÄŸiÅŸiklikleri birleÅŸtirme özelliÄŸi) izin verilmemiÅŸse dosya birisinin üzerinde ise onun dosyayı bırakması gerekiyor. Bu durumda siz dosyanın en son sürümüne sahip oluyorsunuz. Bu durumda sizin localinizdeki dosyalar eski sürüm olduÄŸundan sorun çıkartabiliyorlar ve güncelleme yapmak zorunda kalıyorsunuz. Bu güncellemelerde ise kesin sorun çıkıyor. SVN’de ise isterseniz kodun son halini hiç almadığınız için böyle sorunlar yaÅŸanmıyor. Bu durumda ise Commit ettiÄŸiniz zaman aynı sorunların çıkması olası. İşte bunu engellemek için CruiseControl (CCNet) gibi araçlar kullanılıyor.
  • TFS’in merge tool’u berbat. Şöyle senaryolar beni çıldırtıyor: Projeye yeni dosya eklemek istediÄŸinizde doÄŸal olarak proje dosyasında(sln) da deÄŸiÅŸiklik olduÄŸu için üzerinize almanız gerekiyor. O sırada baÅŸka biriside aynı iÅŸlemi yapıp sizden önce dosyayı Check In ediyor. Bu durumda siz check in yapmak istediÄŸinizde sunucuda farklı bir sürüm olduÄŸu için merge etmesi gerekiyor. TFS her nedense aynı dosyada ama farklı satırlarda olan deÄŸiÅŸikliÄŸi bir türlü merge edemeyip hata veriyor! Sizede orda çıldırmak ve merge toolla boÄŸuÅŸmak(merge tool: Dosyanın iki sürümününde yan yana açıldığı, yapılacak deÄŸiÅŸiklikleri sizin seçtiÄŸiniz ekran) zorunda kalıyorsunuz. SVN’de ise merge olayı daha stabil. Ama yinede yapamazsa dosyalar conflict oluyor ve elle düzenlemeniz gerekiyor.
  • TFS oldukça pahalı bir sistem. Özellikle orta/büyük ölçekli projelerde size inanılmaz külfet çıkartabilir. Buna karşılık SVN bedava.
  • SVN için internette birçok depo hizmeti var. Bunların bir kısmı ücretsiz. Yani projelerinizi ucuza mekandan bağımsız olarak geliÅŸtirebilirsiniz :) Bu servislere örnek olarak; http://unfuddle.com/ veya Google Code verilebilir.

Sonuç

Bence TFS SVN’e göre geride kalıyor. Özellikle fiyat/performans oranında. Ayrıca benim pek TFS’e sempatim yok. Çünkü içinde yer aldığım proje SVN’den TFS’e aktarıldıktan sonra birsürü saçma sapan sorunla karşılaÅŸtık. Ekipteki kimse mutlu deÄŸildi. Ayrıca ben Microsoft ürünlerine çok baÄŸlı yerlerde bile SVN kullanıldığına ÅŸahit oldum. Aynı zamanda birçok platforma tam destek vermesi ise cabası. Mesela, hem Java ile hem .Net ile hemde php ile projeler geliÅŸtiriyorsanız TFS üzerinde bunları yönetmeniz hem zor hem de pahalı. Ama SVN üzerinde bu üçünün bir farkı yok.

SVN + Tortoise SVN sizi her projede paklar.

Bu arada yazının yarısı ingilizce oldu farkındayım ama piyasada herkes böyle konuÅŸtuÄŸu için terimleri Türkçe’ye çevirmedim. Aslında denedim ama kulağıma garip geldi :)

Eklemek istedikleriniz ve itirazlarınız için bekliyorum…

Kaynaklar

Bu yazı istenilen yerde istenilen şekilde yayınlanabilir (değişikliklerden yazının orjinalini yazan yazar kesinlikle sorumlu değildir). Sadece yazdığınız yazının altında veya üstünde orjinal yazıya link verirseniz sevinirim. Vermezsenizde sorun değil. İlginiz için teşekkürler.

Eğer girdiyi beğendiyseniz, başkalarıyla da paylaşın!
Tusul | Habberci | Haber.gen.tr | Oyyla | Bağcık | 100 Puan | Linkibol | Teknikim

9 Yorum

  1. Fatih ŞAHİN diyor ki:

    Merhaba Kaan :) ,

    TFS i tabii sadece bir Source Control sistemi olarak görmemek lazım. Work Item yaratabilme, atayabilme ve yapılan check-in leri bunlarla iliÅŸkilendirme özelliÄŸi oldukça yararlı. Ayrıca yukarıda bahsettiÄŸin bu yeni dosya ekleyince otomatik get latest yapması olayını da optionlardan kaldırabilirsin. Tek kiÅŸinin check-out etmesi yerine shared checkout sistemini kullanabilirsin. Bu durumda, yeni dosya eklemek istediÄŸinde filan get latest yapmana da gerek kalmayacağından, Merge sayısı da aslında oldukça azalacaktır. Bunun haricinde TFS’in Continuous Integration’a destek verdiÄŸini unutmamak lazım. Auto Build  ve Daily Build alabilme özelliÄŸi ve Pre Post Build script ekleme özellikleri, Unit Testing kabiliyetleri, Statik kod analizi, performans ölçümleme yetenekleri filan derken aslında Team System kaliteli kod üretmek için çok daha profensyonel bir çözüm. Ayrıca çok geliÅŸmiÅŸ bir alert sistemi var. İstediÄŸin dosyada veya buildde deÄŸiÅŸiklik olduÄŸu zaman sistemin seni uyarabilmesini saÄŸlayabiliyorsun. Bunun yanı sıra Windows Server domaini ile entegre çalıştığından, User management konusu ve ilgili kullanıcıları alarmlar ile posta yoluyla uyarmak çok basit. SVN e biraz yabancıyım, ama büyük projelerde TFS’in maliyetli olduÄŸunu düşünmüyorum, hatta .net geliÅŸtiricileri için daha mantıklı bir çözüm olarak görüyorum.

  2. Esat ARSLAN diyor ki:

    Merhaba,
    Elinize sağlık açıklayıcı bir yazı ve aydınlatıcı bir karşılaştırma olmuş. Ben ingilizce özürlü birisi olarak okurken anlamakta pek zorlanmadım.Zaten parantez içlerinde de gayet net bir şekilde kelimeleri açıklamışsınız.
    EÄŸer yarısı ingilizce olan türkçe yazılmış bir yazı ararsanız Fatih ÅžAHİN’nin yorumunu okuyabilirsiniz :) ).

  3. Kaan Arslan diyor ki:

    Selam Fatih :D Biraz geç cevap veriyorum ama sana sağlam bir cevap yapıştırmam gerektiği için üzerinde uzunca süre düşünmem gerekti.

    DediÄŸim gibi TFS sadece bir source control sistemi deÄŸil. İçerisinde bir proje yönetim aracıda barındırıyor. Ayrıca diÄŸer MS ürünleriyle uyumuda çok dikkat çekici. Ama benim dediÄŸim senaryoda zaten check-in yaptığın zaman otomatik get latest yapmıyordu. Bu sebepten zaten kiÅŸinin yaptığı deÄŸiÅŸiklikleri alamadığımdan sln dosyasını merge etmesi gerekiyor. Zaten TFS’in en önemli eksiÄŸi merge tool’unun iÄŸrenç olması. Ayrıca dll dosyalarına karşı zaafıda sayılabilir. DiÄŸer yandan evet Unit test kabiliyeti, Build seçenekleri falan çok iyi. Ama bence açık konuÅŸmak gerekirse SVN’in source control yetenekleri TFS’ten çok daha saÄŸlam.

    Ama bu özellikler çok iyi bir şekilde açık aynak birkaç yazılım birleştirilip (üstelik kendi içlerinde entegre olacak şekilde) bir paket hazırlanarakta oluşturulabilir. Mesela, SVN + Tortoise SVN + (isteğe bağlı) AnkhSVN + DotProject gibi. Bu seçenekler çoğaltılabilir tabii.

    Bu durumda TFS içinde seninde saydığın özelliklerin hemen hepsi gelmiş oluyor. Ayrıca gerek stabilite gerekse kullanılış olarak üst seviyede.

    Ben hala küçük/orta ölçekli projelerde TFS’in çok masraflı olduÄŸunu düşünüyorum. Ancak dediÄŸin gibi büyük çaplı projelerde mantıklı olabilir.

  4. Fatih Åžahin diyor ki:

    Kaan,
    Dediklerinin çoğuna katılıyorum özellikle Open Source projelerin gücünü birleştirdiğinde ortaya komple bir çözüm çıkabiliyor. Ancak bunun en büyük sıkıntısı open source çok farklı yelpazede toollar olduğu için, takım içerisinde, yeni katılımlarda olursa iletişimi ve koordinasyonu sağlamak zorlaşabilir.

    Ayrıca teknik konuda bir eleştirim olacak.

    Yukarıda şöyle demişsin

    “SVN kod üzerinde offline TFS ise Online çalışmaya imkan veriyor. Bunun anlamı ÅŸu, siz SVN üzerinde kodu toptan üzerinize alıyorsunuz ve kendi localinizde çalışıyorsunuz(Update). İşiniz bittiÄŸi zaman sunucuya gönderebiliyorsunuz(Commit). TFS üzerinde ise sunucu üzerindeki kodu düzenlemek için üzerinize alıyorsunuz (Check Out). Sonra düzenleyip gönderiyorsunuz (Check In). Yani TFS lock-modify-unlock (üzerine al, deÄŸiÅŸtir, bırak) sistemini kullanıyor. EÄŸer TFS üzerinde merge’e (iki kiÅŸinin aynı dosya üzerinde çalışması durumunda yapılan deÄŸiÅŸiklikleri birleÅŸtirme özelliÄŸi) izin verilmemiÅŸse dosya birisinin üzerinde ise onun dosyayı bırakması gerekiyor. Bu durumda siz dosyanın en son sürümüne sahip oluyorsunuz. Bu durumda sizin localinizdeki dosyalar eski sürüm olduÄŸundan sorun çıkartabiliyorlar ve güncelleme yapmak zorunda kalıyorsunuz. Bu güncellemelerde ise kesin sorun çıkıyor. SVN’de ise isterseniz kodun son halini hiç almadığınız için böyle sorunlar yaÅŸanmıyor. Bu durumda ise Commit ettiÄŸiniz zaman aynı sorunların çıkması olası. İşte bunu engellemek için CruiseControl (CCNet) gibi araçlar kullanılıyor.”

    Bu kısıma katılamayacağım.
    Birinci TFS de offline çalışabiliyorsun. Sonradan Go Online diyerek merge yapabiliyorsun.
    İkincisi TFS de eğer shared checkout a izin verilmemişse dediğin sorun yaşanabilir, ancak bu sorun izin verilmediği için oluşuyor zaten. Aynı dosya üzerinde tüm takımın aynı anda çalıştığı senaryolar ile karşılaştım ve merge bir sorun çıkarmadı.
    Son olarak TFS de Shelve/Unshelve diye bir özellik var. Diyelim ki, bir dosya üzerinde çalışıyorsun ve henüz iÅŸini bitirmedin. Check-in etmek istemiyorsun çünkü kod diÄŸer yazılımcıların iÅŸini bozacak, ancak bir ÅŸekilde TFS’e son halini aktarıp bir kaç arkadaşınla paylaÅŸmak istiyorsun. O zaman shelve yapıp, isteyen ekip ile paylaşıyorsun. Takımdakiler Get Latest yapınca senin yaptıklarını alamıyor, özellikle senin shelve ettiÄŸin versiyonu Unshelve yapmaları gerekiyor. Bu özellik oldukça yararlı olabiliyor. Ayrıca CruiseControl olayına baÅŸka bir baÅŸlık açmak lazım çünkü CruiseControl aslında bahsettiÄŸinden çok farklı kullanım alanı olan bir araç.

  5. Kaan Arslan diyor ki:

    Fatih bende senin dediklerine katılıyorum ama TFS’in merge olayından biz ekipçe inanılmaz sıkıntı çektik/çekiyoruz. BulunduÄŸum projedeki geliÅŸtirici ÅŸirketlerden biriside Microsoft. Ayrıca danışmanlık falanda veriyorlar. Bu sorunlar yüzünden çok tartışma yaÅŸandı ama kimsede gelip senin dediÄŸin özelliklerden bahsetmedi.

    Demekki Microsoft tarafı bile tam olarak bilmiyor :)

    Evet şimdi Go Online olayını hatırladım, haklısın. Bu arada gördüğüm kadarıyla ajanlığa tam gaz devam ediyorsun :D

  6. eyüp altıparmak diyor ki:

    biraz geç olacak cevabım ama anca gördüm siteyi :)
    hacılar şimdi merge tool bence çok iyi zaten merge işlemini seçtiğinizde merge yapılacak dosyalarda farklı satırlara kod yazılmışsa automerge çalışıyo ve sizin bişey yapmanıza gerek kalmadan işini hallediyor.
    Fakat aynı dosya üzerinde çalışan iki developer aynı satırda değişiklik silme veya yeni kod satırla ekleme yapıldıysa automerge işlemi çalıştığında sizden manuel olarak merge etmenizi sağlıyacak yeni bir pencere açılıyor. Bu pencerede 2 bölüm var birisi localdeki dosya diğeri TFS deki dosya orada aynı satırlarda yapılmış işlemler renkler ile gösteriliyor ve sizden seçim yapmanızı bekliyor. Genelde her iki taraftaki değişikliğide işaretliyelip her değişikliğin dosyaya yansımasını sağlayabiliyorsunuz.
    çok developerın olduğu projelerde bu işlem işleri kolaylaştırıyor baya
    hey gidi counter günleri hey :D

  7. Kaan Arslan diyor ki:

    Şimdi hacım,

    ben aksini iddia etmedim zaten, Tfs’de merge var ama çok problemli. Biz bakanlıkta Svn kullanırken, yönetimin ani kararıyla Tfs’e döndük. 100+ developerlik ekip iÅŸkence çekti resmen ne kadar zaman. Özellikle vs proje dosyalarında çok sorun yaÅŸandı. Aynı satırda olmayan kodları bile birleÅŸtiremiyorum ben otomatik falan dedi zımbırtı. Onun dışında bir problemi yok, gayet iyi bir sürüm yönetim sistemi. Tfs. Neyse, bill amca yapmış bize fazla laf söylemek düşmez.

    Bende hey gidi counter günleri diyorum :) Özellikle, neydiii.. hah ice world :)

  8. Can ErdoÄŸan diyor ki:

    Kaan, burdan counter’a ses etmen iyiymiÅŸ ben 10 senedir bırakamadım hala devam online’a. İstediÄŸin zaman katılabilirsin bize :)
    SVN’e gelince tanıştığım ilk günden beri oldukça sorunsuz kullanıyorum. İlk baÅŸlarda sunucuya kurma konularında sorun yaÅŸayabiliyor insan ama daha sonraları her ÅŸey sorunsuz oluyor.
    TFS kullanmadığım için fazla yorum yapamam hakkında ama SVN çok büyük projeler dahil hepsinin üstünden kalkıyor.

  9. Kaan Arslan diyor ki:

    @Can aslında artık pek oynamıyorum counter, yukarıda bişeyler geveleyen eyüp ve fatihle iş sonrası çok oynamışlığımız varda ona istinaden o :) Ben artık daha farklı şeyler takılıyorum, mesela battlefield heroes gibi.. Ama arada bir size takılmak yine de güzel olur aslında :)

Yorum Bırakın