17 Kasım 2017 Cuma

TortoiseSVN Notlarım

Giriş
tortoiseSVN ile ilgili aldığım notlar aşağıda. tortoise svn arayüzünde çeşit çeşit renkler kullanılmış. Renklerin manası var ve dikkat etmek gerekiyor.

Yardımcı olsun diye ekran görüntüsünün ekliyorum.

SVN Commitlenen Dosyaları skip list şeklinde saklar.

Blame
Açıklaması şöyle
"A technical term for displaying the origin of lines by version is annotating a controlled file with its "history."
Dosyadaki satırın hangi commit numarası ile değiştirildiğini gösterir. svn ve git blame tabirini kullanıyorlar ancak blame ilk anlam olarak suçlama, ayıplama manasına geldiği için işlevi ifade etmek için bence kötü bir kelime seçimi olmuş.
Branch/Tag
Proje Yapısı
Klasik proje yapısı şöyledir.
http://svn.foo.com/myproject
 >branches
 >tags
  -engCM
  -formalCM
 >trunk
Her proje trunk altında nasıl bir yapı izleyeceğini kendisi belirler. Bazı projeler şöyledir
>trunk
  >development
    -code
    -documents
Branch ne zaman açılır?
Branch genellikle ileride tekrar head ile birleştirilmesi düşünülen kodlar için açılır. Uzun süre branch'ler halinde çalışmak külfet haline gelebilir.

Tag ne zaman atılır?
A point in time on the trunk or branch that you wish to preserve.

Belli bir olgunluktaki kod release edilince tag atılır.
Projemizin URL'si aşağıdaki gibi olsun
url/myproj/trunk/...
Tagleri oluşturmak için
url/myproj/tags/Rev.1.0.0
şeklinde bir dizin açılır. Dizini açmak için Repo Browser'da "Add Folder" menüsü kullanılır.
Eğer dizini önceden oluşturmak istemiyorsa Branch/Tag menüsündeki "To path" alanına yazılarak ta yapabiliriz ancak tag için dizini öncde oluşturmak bence daha  kolay.

Daha sonra TortoiseSVN -> Branch/Tag menüsü tıklanır. "To path" alanını yeni açılan dizini göstereccek şekilde güncelleriz.

Tag işleminde default olarak HEAD'de bulunan dosyalara belirtilen hedefe kopyalanır. Eğer istenirse belli bir revizyon veya local'daki veriler de taglenebilir.

Ara dizinleri oluşturmak için "Create Intermediate folders" işaretlenir. Tag atarken "Switch working copy to new branch/tag" seçili olmamalıdır!

Tag yerine comment atılırsa ne olur?
CVS gibi sistemlerde koda comment atılma yöntemi kullanılıyordu. Aynı yöntemi SVN'de uygulamak iyi değil çünkü comment'lere bakarak tag'lenmiş kodun içinde ne olduğunu görmek bir hayli zor olurdu.

Commit
Commit seçeneğine tıklanınca "non-versioned" dosyaları da listeleme veya listelememe seçeneği mevcut. Commit işleminde genelde bir de açıklama girilir. Bu açıklama sadece kaynak dosya ile ilgili olsa iyi olur. Projenin tasarımıyla ilgili kritik açıklamaları buraya girmek anlamsızdır. Commit işleminin hızlı çalışmasına dikkat etmek gerekir.
Commit Hook
SVN sunucusunda  repository'nin hooks dizinine .bat veya .sh dosyası yazılabilir. pre-commit.bat veya post-commit.bat commit öncesi veya sonrası çalıştırılır.

Check for Modifications
Bazen svn değişiklikleri hemen algılamaz ve Windows'ta simgler kırmızı yeşil görünmez. Check for modifications menüsü ile simgelerin yenilenmesi sağlanır.

Diff
diff en son güncellenen sürümle diskte dosyayı karşılaştırır. Dosya svn'de ilerlemiş olsa bile head ile disk arasındaki farkı göstermez!

Export
Repository, .svn dizinleri olmadan bir başka dizine kopyalanabilir. Böylece kaynak kodları taşımak daha kolay olabilir.

Ignore
Dosya seçilerek "Move to changelist" -> "ignore-on-commit" menüsü tıklanır. Böylece dosyayı yanlışlıkla commitlemeyiz.

Patch
Kendi lokalimizde yaptığımız değişiklikleri commitlemeden başkasına aktarmak için kullanılır. Patch file1 dosyasını file2 haline getirmek için yapılması gereken değişiklikleri içerir. Örneğin file1 dosyasındaki 3. satırı sil, 5. satırdan sonra şunu ekle gibi bilgileri içerir.

Patch dosyası yaratmak için Tortoise Svn'e sağ tıklanır "Create Patch" seçilir. Açılan pencereden değişiklik yaptığımız ve patch dosyasına girmesini istediğimiz dosyaları seçer ve x.patch isimli dosyaya kaydederiz. Bu dosyayı alan kişi bizimle aynı dizine bu dosyayı yerleştirir ve çift tıklar.. Dosyadaki değişiklikler kendi lokaline yansıtılır.
Relocate
Svn Repository başka bir yere taşındıysa (sunucu değişince olabilir) relocate seçeneği ile yeni sunucu URL'si tanıtılır.
Show Log
Yapılan commitler görülür. Koyu renk ile gösterilen versiyon lokalimizde olan versiyonu temsil eder. Koyu renk satır ilk sırada ise lokalimiz svn ile senkronize olmuşuzdur, eğer daha alt sırada ise biz "update" işlemini yaptıktan sonra farklı commitler olmuştur. Yani lokalimiz geriden gelmektedir. "Show log" seçilince eğer doküman geçmişte isim değiştirmişse veya taşınmışsa "Stop on copy/remove" seçeneğini seçilmemişse tüm tarihçeyi gösterir. Seçili ise işleme kadar olan tarihçeyi gösterir.

Update
Sunucudaki dosyaları getirir. Eğer merge edilebilecek dosyalar varsa otomatik olarak merge eder.

Merge eğer iki kişi aynı dosyanın farklı satırlarını değiştirmişse çok kolay. SVN bunu kolaylıkla hallediyor. Merge edilen dosyaya sağ tıklayıp "Compare with working copy" menüsü seçilirse açılan pencerede 3 bölüm görülür.

Theirs
Sol üstteki "Theirs" penceresi SVN'e commitlenmiş dosyayı gösterir. Bu pencerede "-" ile işaretli satırlar benim sürümümde olmayan satırları belirtir.

Mine
Sağ üstteki "Mine" penceresi "Mine" ve "Theirs"'in birleştirilmiş halini gösterir. Benim satırlarım "+", onların satırları ise "-" ile belirtilir.

Merged
En alttaki "Merged" penceresi ise "Mine" ve "Theirs"'in birleştirilmiş halini renkli olarak gösterir.


Eğer dosyalar arasında conflict varsa, kırmızı renk ile gösterir. Conflict olan dosyaya sağ tıklayıp Resolve conflict using 'theirs' seçilirse, sunucudaki dosya doğru kabul edilir ve değişikliklerimizi kaybederiz.

Silinmiş Bir Dosyayı Geri Getirmek (Revert veya Rollback)
Silinmiş bir dosyayı geri getirmek için "Show Log" seçilir. Yapılan commitler listesi üzerinde dolaşılarak silinen dosya bulunur. Dosya seçilerek "Revert changes from this revision" seçilir. Aynı şekilde dosyanın daha önceki halini de geri getirmek mümkün.

Belli bir Revizyona Geri Dönme
SVN/Update to revision... menüsünden eski bir revizyon numarası girilerek, geri dönülebilir. SVN global revizyon numarası tutar. Bir dosya değişse bile dizinin de revizyon numarası değişir.

Yeni Tortoise SVN 1.7 ile .svn dosyaları tarihe karışıyor. Artık metadata working copy'nin root dizinindeki bir sqlite veritabanında tutuluyor. Bu yüzden kurulumda daha eski client'lar working copy ile çalışamaz uyarısı veriliyor.

Dosya Taşıma

Dosya taşımak için Windows Gezgini ile dosya(lar) seçilir. Seçili nesneler sağ tuşa tıklanarak taşınmak istenen yeni dizine sürüklenir.Açılan menüden "svn move versioned item(s) here" seçilir.

SVN Checkout
SVN'e dahil olmayan bir dizine sağ veya boş bir yere sağ tıklanınca "SVN Checkout" menüsü gelir. Menüyü seçince "Checkout" kutusu açılır. Repository adresi girildikten sonra - örneğin "svn://10.5.91.179/Projem" gibi - dosyalar seçtiğimiz dizine indirilirler.

Ayarları Temizlemek
Tortiose Svn bazı ayarları kaydeder. Örneğin kullanıcı şifresi gibi. Bu tür şeyleri temizlemek için Tortoise svn / Settings / Saved Data menüsünü seçin. Authentication data yazısının yanındaki "Clear" düğmesine tıklayın.

Komut Satırından Çalıştırma
TortoiseSVN bir GUI programı ancak komut satırından TortoiseProc.exe kullanılarak aşağıdaki gibi çalıştırılabilir.
<Path to TortoiseSVN>\bin\TortoiseProc.exe /command:<SVNCommand> <Parameters>
closeonend seçeneği
TortoiseSVN ekrana popup birşeyler çıkarabilir. closeonend seçenekleri kullanılırsa otomasyon daha kolay yapılabilir.

/closeonend:0 don't close the dialog automatically
/closeonend:1 auto close if no errors
/closeonend:2 auto close if no errors and conflicts
/closeonend:3 auto close if no errors, conflicts and merges

command seçenekleri

checkout
Tüm projeyi en baştan bir kere checkout eder. Kod büyükse uzun sürebilir.
tortoiseproc /command:checkout /path:D\:MyProject /url:http://subversion/myproject/trunk/code /noninteractive

update
checkout komutu ile aynı. Sadece değişen dosyaları indirir. Revizyon ve diğer ıvır zıvır seçenekleri hiç kullanmadım.
Updates the working copy in /path to HEAD

tortoiseproc /command:update /path:D\:MyProject /url:http://subversion/myproject/trunk/code /noninteractive

repostatus
Eğer Update komutu çalıştırılınca hangi dosyaların indirileceğini görmek istersek aşağıdaki gibi yapabiliriz.Açıklaması şöyle:
Opens the check-for-modifications dialog. The /path specifies the working copy directory. If /remote is specified, the dialog contacts the repository immediately on startup, as if the user clicked on the Check repository button.

tortoiseproc /command:repostatus /path:D\:MyProject /remote

SVN Sunucusunu Kilitleme
SVN sunucusu admin tarafından kilitlenebilir. Böylece commit yapılması önlenebilir.

2 yorum:

  1. Siteniz bilgi açısından çok güzel başarılarınızın devamını dilerim. Eskisi kadar askeri alanda yazılar yazmıyorsunuz sanırım. O tür yazılarınızıda severek takip ediyordum.

    YanıtlaSil
  2. Doğru. Askeri alanda artık yazmıyorum :(

    YanıtlaSil