Alet Çantamızda Neler Bulunmalı
Subversion ile çalışabilmek için olmazsa olmaz araçlarımızdan bazıları şunlardır
TortoiseSVN
- TortoiseSVN: Windows Explorer'a entegre olan (Shell entegrasyonu) ve 9 miliyon download'a ulaşmış Svn ile ilgili client tool piyasasının bir numaralı open source uygulamasıdır.Özetle TortoiseSVN herhangi bir lokasyondaki SVN repositorylerine ulaşarak commit, update, export, import vs gibi nerdeyse tüm Svn işlevselliğini sunuyor.
- AnkhSVN: Visual Studio'ya entegre olan (addin) Subversion clientidir. Open source bir proje olması nedeniyle rabet edilmektedir. İlk versiyonlarında oldukça fazla sorun olmakla birlikte aşama aşama daha stabil hale gelmektedir. Kullanımı oldukça kolay olmakla birlikte daha önce Visual Source Safe kullananların alışması Subversion'a özgü konseptler nedeniyle zaman alabilmektedir.
- TortoiseSVN ve Explorer ile entegre olabilen open source Diff/Merge tool'u.
Temel olarak Visual Studio ile çalışırken AnkhSVN diğer editörler ile çalışırken de TortoiseSVN kullanabilirsiniz.
Temel İşlemler
Burada anlatılan temel işlevler TortoiseSVN için geçerli olmakla birlikte bir kısmı AnkhSVN eklentisi için de geçerlidir.
- Import: Halihazırda Svn'de yer almayan bir projenizi Svn'ye göndermek için kullanacağınız komuttur.
Import işleminden önce proje'nizin klasör yapısını netleştirmeniz önerilmektedir. Aynı zamanda örneğin
bir Visual Studio projesini Svn'ye gönderiyorsanız Import öncesi obj ve bin klasörlerini silmeyi tercih edebilirsiniz, çünkü
obj ve bin klasörlerinde derleme sonrasında oluşan binary dosyalar yer almaktadır ve biz bu binary dosyaları versiyon
kontrolü altında tutmamayı tercih ediyoruz.
- Checkout: Svn'de yer alan bir projenin Working Copy'sini local diskinize almak için kullanacağınız komuttur.
- Export: Svn'de yer alan bir projenin Workink Copy'sini almadan ilgili projeyi local diskinize kopyalamak için kullanacağınız
komuttur. Örneğin bir word dokümanını local diskinize alıp e-mail ile göndermek istiyorsanız bu dosyayı export etmeniz uygun olacaktır, çünkü bu dosya üzerinde değişiklikler yapamayacak ve commit etmeyeceksiniz.
- Commit: Working copyniz üzerinde yaptığınız değişiklikleri (klasör veya dosya seviyesinde) repository'ye apply etmek olarak da tarif edilebilir. Commit işlemi sırasında eğer sizin working copynizin revision numarası repository'deki revision numarasından farklı ise hata alırsınız. Hata mesajında working copynizin "out of date" olduğu ve update etmeniz gerektiği yazmaktadır. Böyle bir durumda update işlemi yaparsanız ve working copyniz ile repositorydeki dosya farklı ise conflict olduğu ile ilgili bir mesaj alacaksınız ve otomatik olarak dosyanız "Conflict" olarak işaretlenecektir.
- Conflictlerin Giderilmesi: Commit sırasında hata alıp update işlemini yaptığınızda working copynizin ile repositorydeki versiyon farklı ise conflict ortaya çıkar. Update sırasında conflict olduğu konusunda uyarılırsınız ve otomatik olarak dosyanızın iki adet kopyası diskinize yazılır. Bu dosyalardan ilki repositorydeki revisiondır, diğeri ise sizin working copy'nizin baseidir. Örneğin siz Faculty.cs dosyasını localinize alırken revision numarası 24 ise bu aynı zamanda working copynizin base revision'ıdır. Repositorydeki geçerli revision da 27 ise, update sonrasında elinizde şu dosyalar bulunacaktır Faculty.cs.r24 (working copynizin base revisionu), Faculty.cs.r27 (repositorydeki geçerli revision) ve Faculty.cs( revision numarası 27 olarak görününen fakat conflict nedeniyle henüz commit etmediğiniz dosya). Conflict'i TortoiseSVN ile gidermek için iki yöntem kullanabilirsiniz.
- Edit Conflicts menüsü ile TortoiseMerge otomatik olarak açılır sağ tarafta dosyanın repositorydeki hali, sol tarafta sizin working copyniz gösterilir altta da merge işlemini yapabileceğiniz bir versiyon vardır. Merge işlemini bu editör ile yapıp Merge menüsünde Mark As Resolved diyerek conflicti kaldırdığımızı söyleyebiliriz.
- İkinci yöntemde olarak örneğin Faculty.cs dosyasını bir editör ile açmamız gerekir. Faculty.cs içinde <<<<<< mine ve <<<<<<< rN şeklinde ilave satırlar working copyniz ile repository versiyonu arasındaki farklar belirtilir. Merge işmini text editöründe yapıp TortoiseSVN'in Resolved işlevini kullanarak Conflict'in giderildiğini söylememiz gerekecektir.
Yöntemlerden herhangi birini uyguladıktan sonra Faculty.cs dosyasını repository'ye Commit edebilirsiniz.
NOT: Conflict sadece dosyaların içerikleri ile ilgili bir kavramdır. Kalsör veya dosya ekleme/çıkarma sonrasında working copy ile repository arasında meydana gelebilecek farklılıklar conflict olarak algılanmamalı. Örneğin repositoryde olan ve sizin working copynizde bulunmayan bir dosya veya klasör Update sonrasında working copynizde yer alacaktır.
- Update: Working copynizin repository ile senkronize edilmesi için kullanılan bir işlevdir.Update sonrasında Working Copy'niz repository'nin son hali ile güncellenir. Burada dikkat edilmesi gereken nokta Update işlemi Repository -> Working Copy yönünde gerçekleşen bir işlemdir. Update seçmeli olarak yapılabileceği gibi daha önce de anlatılan Conflict durumunda zorunlu olarak yapılması istenebilmektedir.
- Branching/Tagging: Genel pratik olarak kaynak kodunun en güncel development hali Trunk altında yer almaktadır. Development sırasındaki tüm değişiklikler Trunk klasörü altında gerçekleştirilir. Production versiyonlar ise , yani stabil haldeki kullanıma hazır versiyonlar Tag klasörü altında versiyon numarası bazında açılan klasörlere arşivlenir. Taglar genel pratik olarak değiştirilmezler ve sadece arşiv amaçlı olarak kullanılırlar. Deneysel amaçlı çalışmalar ise Branches klasörü altında deneysel çalışmanın amacını açıklayan bir klasör altına aktarılıp deneysel development buradaki kaynak kod üzerinden yapılabilir. Branching/Tagging TortoiseSVN'in Repository Explorer'ınından klasörlerin (server side veya repository tarafında gerçekleşen) doğrudan kopyalanması ile yapılabileceği gibi bu işlevin kısayolu olan Branch/Tag menüsü kullanılarak da yapılabilir.
- Blame: Bir başlangıç revisionundan bir bitiş revisionuna kadar ilgili dosyadaki değişikliklerin kimler tarafından yapıldığını ve hangi notlar ile commit edildiklerini görebilmemiz için sunulan bir işlevdir. Blame fonksiyonel bir işlevsellik olarak değil bir rapor olarak algılanmalıdır. Blame raporlarına TortoiseSVN menüsündeki Blame ile ulaşabileceğimiz gibi, Show Log sonrasında açılan Log Messeges ekranında farklı revisionları seçip sağ click ile açılan menüden de ulaşabiliriz.
Örnek Kullanım Senaryoları
- Yeni bir projeyi SVN'e eklemek:
- SVN'de yer alan bir projenin working copy'sini diskimze almak:
- SVN'de versyionlanmasını istemediğimiz klasör veya dosyaları tanımlamak
- Working Copy üzerinden repository'ye yeni bir dosya veya klasör ekleyip commit etmek.
- Library olarak kullanacağımız projeleri "externals" vasıtasıyla tanımlamak.
- Bir dosyanın veya klasörün kilitlenmesi
- Merge nasıl yapılır, farklılıklar nasıl görülebilir.