9 Nisan 2015 Perşembe

Team Foundation Server ile Merge Yapımı ve Kod Karşılaştırma

     1. Merge
     Team Foundation Server (TFS)'de oluşturduğumuz branchlar arasında kodları çift yönlü aktarabilmemize olanak sağlayan merge (birleştirme) işlemi bulunmaktadır.[1]  Merge, kaynak branchta yapılan isim değişikliklerini alma, dosya düzenleme, ekleme, silme veya yapılan değişiklikleri geri alma gibi işlemleri hedeflenen branch ile birleştirir. Merge işlemi, özel sürümleri veya tüm değişiklikleri birleştirme gibi seçenekler sunmaktadır. Klasörler arası dallandırma ve birleştirme yapabilseniz de, takımınız için en iyi deneyim sadece dallar arası dallandırma ve birleştirme yapmaktır.

     "Team Foundation Server ile Folder, Branch ve Label Oluşturma" adlı yazımda açıkladığım çeşitli sebeplerden dolayı, çoğu yazılım geliştirme takımı birçok brancha ayrılmış kod temelinde çalışır. Branch kullanılıyorsa, takım en sonunda projenin belirli aşamalarında farklı branchlarda tamamlanan işleri tümleştirmelidir. [2] Örneğin, Release 1 kodunuz teste taşındığında, kodunuzu Release 2 olarak branch edip yazılım geliştiricilerin bu Release üzerinde çalışmasına izin verirsiniz. Release 1 test edilirken hatalar bulunup Release 1 branchında düzeltirsiniz ve bu değişiklikleri yeni sürüm (Release 2) ile birleştirmeniz (merge) gerekecektir.

     Merge işleminin ne olduğunu anladıysak, şimdi sıra nasıl yapılacağının öğrenilmesinde. Branchlar arasında kod merge etmeyi adım adım göstereceğim . En son yazımda Main Branch'ı içerisine projemizi atmıştık. Bunu Dev Branch'ı ile merge etmek istersek, Source Control Explorer'da Main Branch'ına sağ tıkladığımızda "Branching and Merging" menüsünden Merge'e tıkladığımızda şekil 1'de görüldüğü gibi "Merge Wizard" ile karşılaşıyoruz.

Şekil 1: Merge Wizard
     Burada, Source branch kısmı yukarıda da bahsettiğim gibi kodları alacağımız kaynak branchımızdır. Hedeflenen branch (Target branch) ise kopyalamak istediğimiz yeri göstermektedir.
"All changes up to a specific version", "Selected changesets" kısmı ise belirli bir sürüme kadar tüm değişiklikleri mi yoksa belirli değişiklikleri mi merge edeceğimizi seçme fırsatı sunmaktadır. Mümkünse, All changes up to a specific version'a tıklayın, böylece gelecek birleştirmelerde çakışma riski azalır. All changes up to a specific version'u seçersek, şekil 2'de görülen kaynak öğelerin sürümlerini seçme ekranı ile karşılaşıyoruz.

Şekil 2: Sürüm Seçimi
     Burada Latest Version, Changeset, Date, Label, Latest Version, Workspace Version seçeneklerini sunmaktadır. Kaynak branchta hangi sürüm merge edilmek isteniyorsa seçildikten sonra ilerliyoruz ve Perform the merge operation (Birleştirme işlemini gerçekleştir) sayfasında , Finish diyerek işlemi sonlandırıyoruz.
     Eğer kod hem kaynak branch hem de hedef branchta değiştirilmiş ise merge ederken conflict (çakışma) düzeltmek zorunda kalırsınız. Bir sonraki yazımda bu konuya ayrıntılı değineceğim.

     2. Kaynak Kod Karşılaştırma
     İki kod veya aynı kodun iki sürümü arasındaki farkı görmek için kod karşılaştırma penceresini kullanabilirsiniz. Kodun sürümlerinden biri çalışma alanınızda kullanıma alındıysa karşılaştırmayı çalıştırırken kodu değiştirebilirsiniz.
   
    Kod karşılaştırma penceresini açmak için ilk olarak Source Control Explorer'da karşılaştırmak istediğimiz kod dosyasının üzerine sağ tıklayarak "Compare" menüsü seçiyoruz ve şekil 3'te görülen pencere ile karşılaşıyoruz.

Şekil 3: Kod Karşılaştırma Penceresi
     Burada Target Path kısmında karşılaştırmak istediğimiz kod dosyasını seçerek alttaki View Options kısmında karşılaştırma penceresinde nelerin görünmesini istediğimizi seçip tamamlıyoruz ve sekil 4'te görülen pencere ile karşılaşıyoruz.

Şekil 4: Dosya Farklılıkları Penceresi
     Burada farklılık bulduğu dosyaları kırmızı ile belirtiyor ve üzerine tıkladığımız zaman şekil 5'te görülen farklılık penceresini açıyor.

Şekil 5: Kod Karşılaştırma
 

     Burada koda yeni eklenen yerler yeşil, silinen yerler ise kırmızı olarak belirtilmektedir.

     3. Değişiklikleri İzleme
     Takım üyeleri branchlar halindeki bir kod temelinde çalışıyorsa, hangi branchların değiştirildiği ve bu değişikliklerin ne zaman birleştirildiği hakkında bilgi bulmakta zorlanabilirler. TFS ile farklı branchlar üzerindeki dosyaların ilişkilerini takip etmek ve herhangi bir branchta yapılan bir değişikliğin Merge işlemleri ile adım adım hangi branchlara aktarıldığını takip etmek mümkündür.[3]  Nerede yapıldığı, nerede birleştirildiği ve bu olayların ne zaman gerçekleştiği gibi bilgileri görüntülemek için Tracking Changeset (Değişiklik Kümesini İzleme) penceresini kullanabilirsiniz. Tracking Changeset penceresi değişiklik kümesiyle birleştirilen branchları gösterir. Örneğin, şekil 6'da Tracking Changeset penceresi değişiklik kümesi 38'in nasıl Dev branchından bir alt branch ile merge edildiğini ve sonrasında temelsiz olarak farklı iki branch ile merge edildiğini gösterir.
   
Şekil 6: Tracking Changeset[4]
     Merge işleminin uygulandığı branchlar değişiklik kümesi numaralarıyla birlikte yeşil renkte gösterilmiştir. Bu branchlardan birine (örneğin, şekil 6'daki Version2) tıklayarak o brancha ulaşmak için değişiklik kümesinin ihtiyaç duyduğu tüm merge işlemlerini vurgulayabilirsiniz. 
     Merge işlemi standart ise gri düz çizgi ile, temelsiz merge ise noktalı çizgi ile gösterilmektedir.
     Branch değişiklikliklerin hepsini değil de bir kısmını aldıysa branch bir desenle doldurulur ve bu branchtaki değişiklik kümesi numaralarının sonuna yıldız eklenir. Örneğin şekil 6'da değişiklik kümesi 38'deki değişikliklerin yalnızca bazılarının, Test Branch'ıyla merge edildiğini gösterir.
     Değişiklik kümesinin merge edilmediği branchlar mavi ile gösterilir.[4]

     Tracking Changeset penceresini açmak için ilk olarak Source Control Explorer'da bir branchın içerdiği branch, klasör ya da dosyaya sağ tıklayarak "View History" menüsü seçiyoruz ve şekil 7'de görülen pencere ile karşılaşıyoruz. 

Şekil 7: History
     Burada hangi değişikliğin kim tarafından ne zaman yapıldığını, commentini gibi ayrıntıları görüntüleyebiliyoruz. Burada istediğimiz değişiklik kümesi üzerine sağ tıklayarak "Tracking Changeset" menüsünü seçiyoruz ve çıkan pencerede "Visualize" diyerek şekil 6'daki gibi görsel olarak ifadesini elde edebiliyoruz. 
    
     Tracking Changeset penceresindeki menüden Timeline Tracking (Zaman Çizelgesi Görünümü)'ne geçerek değişiklik kümesinin bir ya da daha fazla branch ile ne zaman merge edildiği hakkında bilgi alabilirsiniz. Bu görünüm sadece her merge işleminin kaynak ve hedeflerini değil, ayrıca merge işleminin ne zaman olduğunu da gösterir.

Şekil 8: Timeline Tracking[4]
     Şekil 8'deki örnek şekil 6'daki Tracking Changeset penceresinin merge sırasını gösteren bir görünümdür.
    Değişiklik kümesini alan branchlar görünümün en üstünde belirir. Merge edilmeyen branchlar en altta beyaz olarak gösterilmektedir.



     Bu haftalık yazımı burada bitiriyorum. Haftaya merge işlemi sırasında oluşabilen conflict (çakışma) olayına değineceğim. Okuduğunuz için teşekkürler.






Referanslar:

[1] TFS'de Branch ve Merge, http://www.yazgelistir.com/Makale/team-foundation-server-da-branch-ve-merge-kullanimi-1, 09.04.2015
[2]Merge Folders and Files, https://msdn.microsoft.com/tr-tr/library/ms181428.aspx, 09.04.2015
[4] Tracking Changeset, https://msdn.microsoft.com/tr-tr/library/dd405662.aspx, 09.04.2015

Hiç yorum yok:

Yorum Gönder