25 Mart 2015 Çarşamba

Team Foundation Server ile Folder, Branch ve Label Oluşturma

     Team Foundation Server (TFS)'ın çok güçlü bir Branch mekanizması vardır. Kaynak kod ağacının herhangi bir noktasına aşağı farklı ve çok kademeli Branch oluşturmaya izin verir.[1]  TFS üzerinde parelel kod geliştirmek yada başka bir sebepten dolayı kodun kopyasını almak istediğimizde Branch işlemi ile yapabiliriz.

     Branch (dal) oluşturmanın iki temel amacı vardır:
     İlk olarak paralel kod geliştirmek istediğimizde farklı takımların birbirini etkilemeksizin çalışabilmesine olanak sağlar.
     Diğer amacı ise geliştirdiğimiz kaynak kod ile yayınlamış olduğumuz sete ait kaynak kodlarının birbirini her adımda etkilemesini engellemek. Bu amaca uygun olarak 3 farklı dallanma yapılması önerilir. Bunlar Dev, Main ve Release olması tavsiye edilir.[2]
     Ekipler işlerini birleştirmek üzere hazır olduklarında kendi branchlarını Dev Branch'ı altında birleştirirler. Dev Branch'ındaki yapılar sabit ve teste hazır olduklarında, ekipler Dev Branch'ını Test Branch'ıyla birleştirirler.[3]
     Her sürüm yayınlandığında Main Branch, Version1 branch, Version2 branch gibi yeni sürüm branchlara ayrılır. Bu stratejiyi izleyerek gerektiğinde, ürünlerin geçmiş sürümlerinden her biri ayrı ayrı geliştirebilir ya da düzeltebilir.[3]
     
     Kullanılan bazı branch modelleri aşağıdaki şekillerde gösterilmiştir:

[image[39].png]
Şekil 1: Basit Branch Planı[2]
[image[38].png]
Şekil 2: Standart Branch Planı[2]

[image[32].png]
Şekil 3: Gelişmiş Branch Planı[2]
     Folder (Klasör) yalnızca branch, file yada diğer folderlar için container olarak düzenlemek için kullanılmaktadır. Branchları folder yapısı altında bulundurmak branchları organize etmemize yardım eder ve Source Control Explorer'daki kaynak kod ağacında gezinmeyi kolaylaştırır. Folder ve branch farklı görünüme ve özelliklere sahiptir. Bir branch ve folderı sağ tıklayıp Özellikler öğesini tıkladığımızda, farklı bilgi ve işlevselliği görüntüleriz. [4] 

     Şekil 4'te örnek folder ve branch yapısı görülmektedir.
Şekil 4: Folder ve Branch Yapısı[3]
     1. Team Project Altında Folder Oluşturma
     Bu adımda, daha önce oluşturduğumuz Team projemizin source control ekranında Main adında bir root folder oluşturacağız. Bunu kaynak kodlarınız ve diğer proje mimarileriniz için root düzeyinde bir container olarak kullanabilirsiniz. Ayrıca birden fazla projeye yayılan herhangi bir Visual Studio solution(.sln) dosyalarını da burada saklayabilirsiniz.

     İlk olarak Visual Studio'yu açarak Team Explorer'dan Source Control Explorer'ı açıyoruz. Şekil 5'te görüldüğü gibi projemize sağ tıklayarak New Folder diyoruz ve sağda dosya adına main yazıyoruz.

Şekil 5: Folder Oluşturma
     Şekil 5'te görüldüğü gibi oluşturduğumuz folderda check-in yapmadığımızı belirten "eklenmeyi bekliyor" simgesi (yeşil + işareti) bulunmakdır. main folderımıza sağ tıklayarak Check In Pending Changes diyerek Şekil 6'da görülen kısma (comment) açıklama yazıyoruz ve üstteki Commit butonuna tıklıyoruz. Daha sonra açılan uyarı ekranında bir daha görmek istemiyorsak kutuyu işaretleyip devam ediyoruz.

Şekil 6: Check In Pending Changes
     Tüm adımları başarı ile yaptığımızda projemizin altında main folder oluşturmuş olduk.

     2. Folder'ı Branch'a Çevirme
     Solution Control Explorer içinde dönüştürmek istediğimiz folderın sunucuda mevcut olduğundan emin olduktan ve folderın yanında eklenmeyi bekliyor işeretini görüyorsak Check In Pending Changes yaptıktan sonra oluşturmuş olduğumuz folderı brancha dönüştürmeye başlayabiliriz. Bunun için ilk olarak Source Control Explorer'da gördüğümüz main klasörüne sağ tıklayarak Branching and Merging deki Convert to Branch'e tıklarıyoruz. Karşımıza Şekil 7'de görülen ekran çıkıyor.  Burada kimin oluşturduğunu ve açıklama ekleyebilirsiniz.

Şekil 7Convert Folder to Branch
     Convert'e tıkladıktan sonra çevirme işlemini tamamlamış oluyoruz. Folder şekil 8'de görüldüğü gibi brancha dönüşmüş oldu. Bir folderı brancha dönüştürdükten sonra branch yapısını değiştirmeye karar verirsek aynı şekilde tekrar foldera dönüştürebiliriz.

Şekil 8: Branch
     Önemli bir not düşmek gerekirse, branchları iç içe geçiremezsiniz, bu nedenle bir branch içeren ya da bir dala ait olan folderı brancha dönüştüremezsiniz. Örneğin şekil 9'da gösterilen FeatureTeamA branchının üst veya alt folderlarının brancha dönüştürülemeyeceğini gösterir.[3]

Şekil 9: Branch Örneği[3]
     Bir folderı brancha dönüştürdükten sonra söz konusu branchtan sağ tıklayarak Branching and Merging'den Branch a tıklayarak başka branchlar oluşturabilirsiniz.

     Branch oluştururken dikkat edilmesi gereken en önemli nokta gereksiz branch oluşturmamaktır. Çünkü branch kullanmak projemize karmaşıklık ve maliyet ekleyebilir. Örneğin bir sonraki yazımda bahsedeceğim merge (birleştirme) işleminde iki branchı merge etmek istediğimizde oluşan çakışmaları çözümlemek zorunda kalabiliriz. Bu yüzden bir branch oluşturmadan önce label (etiket) uygulayarak gereksinimlerimizi daha iyi karşılayıp karşılayamayacağınızı düşünmeliyiz. Label uygulayarak dosyalarımızın durumunun anlık görüntüsünü hızlı ve kolay bir şekilde alabiliriz, böylece daha sonra bu durumdaki dosyaları alabilir veya build edebiliriz. [3]

     3. Label Kullanma
     Label daha sonra başvurabilmemiz için dosyalarımızın belirli anda anlık görüntüsünü almamızı sağlar. Labellarımızı kullanarak, büyük bir dosya kümesini görüntüleyebilir, yapılandırabilir ya da labelı uyguladığımızdaki durumuna geri alabiliriz. Label uygulamak branch oluşturmayla aynı yararları, daha az maliyet ve karmaşıklıkla birlikte sağlar.
   
     Label uygulamak için Sounce Control Explorer'da , label uygulamak istediğimiz koleksiyon, takım projesi, branch ya da  folder üzerinde sağ tıklayarak Advance menüsünden Apply Label seçeneğini tıklıyoruz. Karşımıza şekil 10'da görülen pencere çıkmaktadır.

Şekil 10: Label Oluşturma
     Name kısmına dilediğimiz bir adlandırma kuralını izleyen label için bir isim veriyoruz. İsteğe bağlı olarak Comment kısmına yorum bırakabiliriz. Version listesinde default olarak son versiyon seçilidir ama değiştirmek istersek 4 seçeneğimiz daha var:
     Changeset seçeneğinde Changeset box'tan numarasını belirleyerek seçebiliyoruz ya da yanda açılan "..." kutusundan varolanlardan istediğimizi seçebiliyoruz.
     Date seçeneğinde belirli bir tarihteki halini seçebiliyoruz.
     Label seçeneğinde yeni labelın temel alacağı varolan labellardan seçim yapılır. Varolan labelları görmek için yine "..." kutusundan arama yaptırabiliriz.
    Workspace Version seçeneğinde kendi çalışma alanımızdaki versiyonu için label oluşturulur.

     Ayarlarımızın istediğimiz gibi olduğundan emin olduğumuzda Create  yada daha sonra değiştirebilmek için oluşturduktan sonra label penceresini açan Create and Edit seçeneklerinden birini seçerek label oluşturmayı tamamlıyoruz.

     3.1. Labelları Listelemek ve Bulmak
     Labelları bulmak için Source Control Explorer'da projemize sağ tıklayarak Find menüsünden Find Labels seçeneğini seçiyoruz. Daha sonra karşımıza şekil 11'de görülen pencere çıkmaktadır.

Şekil 11: Label Bulma
    Üstte görülen arama kriterlerinden istediklemizi girerek Find diyoruz ve projemizde bulunan labellar karşımıza çıkmış oluyor. Buradan istersek değiştirebilir ya da silebiliriz.

     3.2. İstenilen Label Versiyonunu İndirme     Bir labelı aldıktan haftalar ya da aylar sonra, dosyaların anlık görüntüde varolan durumunu görüntülemek ya da o durumuyla çalışmak isteyebiliriz. Bir dosya kümesinin labelını çalışma alanımıza indirmek için Advanced menüsünden Get Specific Version diyerek şekil 12'de görülen pencere ile karşılaşıyoruz.

Şekil 12: Label İndirme 
     Burada Type olarak Label seçiyoruz ve sağdaki "..." kutusundan varolan labellardan hangisini istediğimizi seçiyoruz ve Get diyerek işlemi tamamlıyoruz.
 
     Labellarda ilgili diğer işlemleri (dosya ekleme, çıkarma vs.) daha önce açmış olduğumuz label penceresi üzerinden yapabilirsiniz.

     Bu haftalık yazımı burada bitiriyorum. Haftaya Check-in, Check-out Yapımından devam edeceğim.
     
     Bir sonraki yazımda buluşmak üzere, okuduğunuz için teşekkürler.






Referanslar:

3 yorum:

  1. güzel, anlaşılır anlatım.
    teşekkürler

    YanıtlaSil
  2. Merhaba Emine Hanım,
    Öncelikle bu güzel çalışmanızdan dolayı çok teşekkür ederim.
    Branch metodolojisi ile ilgili;
    1- Test branch'i süreçte mevcut mu? Dev/ Main/ Release den hariç bir branch mi?
    2- Dev branch'inde yazılan kodlar Sürüm Geçişine hangi parent branch'lere merge olduktan sonra iletiliyor.
    3- Parent branc'ler arasındaki merge mantığı nasıl?

    Teşekkür ederim.

    YanıtlaSil
  3. Teşekkürler, güzel anlatım.

    YanıtlaSil