TORTOISE SVN KULLANIMI
Transkript
TORTOISE SVN KULLANIMI
TORTOISE SVN KULLANIMI İçerik 1- Depo Oluşturma 2- Projeyi Depoya Aktarma 3- Çalışma Kopyası Oluşturma 4- Depoya Dosya / Klasör Ekleme 5- Değişiklikleri Depoya İletme 6- Projenin Güncel Halini Depodan Çekme 7- Dosya Taşıma / Kopyalama 8- Değişiklikleri Geri Alma 9- İstenilen Versiyona Geri Dönme 10- Dosya Silme 11- Dosya Kilitleme 12- Çakışmaların Çözümü * Bu makale, Sürüm Kontrol Sistemi (SVN) 'nin çalışma mantığını bildiğiniz ön görülerek yazılmıştır. DEPO OLUŞTURMA TortoiseSVN kurulduktan sonra projelerimizin depolanacağı, programın kontrolü altında olacak, içi boş ve yazma izninin olduğu bir klasör oluşturduktan sonra klasöre sağ tıklayarak depo adını verdiğimiz bir klasör oluşturuyoruz. Oluşturduğumuz bu klasör yerel ağda başka bir bilgisayarda da olabilir. Bu durumda klasörü paylaşıma açmamız gerekiyor. Bu örnekte depo klasörü ile çalışma klasörünü aynı bilgisayar üzerinde kurguladım. “Create repository here” ya tıkladıktan sonra depo oluşturuldu mesajına tamam dedikten sonra pencereyi kapatıyoruz. PROJEYİ DEPOYA AKTARMA Daha önce tek başımıza çalıştığımız bir projeye başka ekip arkadaşları dahil olduğunda bu projeyi onlarla paylaşmak için öncelikle projeyi depoya dahil etmeliyiz. Bunun için, daha önce tek başımıza çalıştığımız proje dosyamıza sağ tıkladıktan sonra Import seçeneğini seçmemiz gerekiyor. Açılan pencerede bizden deponun adresini istiyor. file:/// başlayan adres ile depo klasörünü, ve depo klasörü altında ise “proje1” klasörü altına aktarmasını istiyoruz. Bu “proje1” klasörünü biz el ile oluşturmadık. Ayrıca oluşturduğumuz depo klasörüne kesinlikle el ile müdahale ( ekleme , silme vb ) etmemeliyiz. Eğer adresi doğru girebildiysek tamama bastığımızda aşağıdaki gibi bir bilgi kutucuğu görmemiz gerekiyor. Sol altta added:6 diyor. Yani depoya 6 adet dosya gönderdik ve sistem buna bir numara verdi. At revision:1 Bundan sonra her ekleme, silme, düzenleme işlemlerinde sistem bu olaylara ardışık ve benzersiz numaralar verir. Bu numaralar değişiklikleri takip etmemiz açısından yol göstericisi durumundadır. ÇALIŞMA KOPYASI OLUŞTURMA Eski projemizi depoya aktardık ancak işlem henüz tamamlanmadı. Değişikliklerimizi az önceki proje klasörümüzde yapmayacağız artık. Bundan sonraki kısımda oluşturacağımız “çalışma kopyası”nda yapacağız bütün değişiklikleri. Onun için bir klasör oluşturup aşağıdaki gibi az önce depoya aktardıklarımızı geri çekiyoruz... Açılan pencerede deponun adresini ve mevcut çalışma kopyası klasör adreslerini yazıyoruz. Alt kısımda gördüğümüz “HEAD Revision” ile depodaki projenin son halini çekebiliriz. Bir alttaki Revision ile de az önce bahsettiğim numaralardaki revizyonları çekebiliriz. Geçmiş revizyonları Show Log kısmından görebiliriz. Kopyayı oluşturduktan sonra otomatik olarak klasör içinde gizli formatta .svn klasörü oluşur. Bu gizli klasöre müdahale edersek depo ile bağlantımızı koparmış oluruz. Ayrıca dosya klasörlerdeki simge yeşil “ok” işareti halini alır. Bu şu demek; çalışma kopyasındaki öğelerimiz depo ile senkron halde... DEPOYA DOSYA / KLASÖR EKLEME Depoya dosya veya klasör eklemek için Windows üzerindeki gibi klasöre dosya eklemek yeterli değil. Windows gezgini ile dosyayı klasöre yapıştırdıktan sonra dosyaya sağ tıklayıp fotoğraftaki gibi Add dememiz gerekiyor. Add demediğimiz müddetçe yeni dosyanın simgesi “?” olarak kalacaktır. Çünkü depo ile bu dosya henüz ilişkilendirilmedi. Add dedikten sonra yapmamız gereken önemli nokta ise; yapılan her işlemden sonra ( ekleme, silme, düzenleme ) bunu depoya bildirmeliyiz. Aksi halde deponun bu değişikliklerden haberi olmayacak, bir başka ekip arkadaşı güncel hali içeri aktardığında bu dosyaları göremeyecektir. Bunun için dosya veya klasörlere sağ tıklayarak Commit dememiz gerekmektedir. Commit dedikten sonra açılan pencerede Message kısmına yorum yazıyoruz. Bu alan zorunlu değil ancak proje tertip ve düzeni açısından olması gerekmektedir. Yarın birgün başka ekip arkadaşımız bu dosyanın neden eklendiğini, hangi değişiklikler yapıldığını görmek ister. Ok diyerek bu değişikliği depoya iletiyoruz. Depoya iletim sonrası aşağıdaki fotoğrafta göreceğiniz üzere versiyon numarası 2 ( At revision:2 ) oldu. Küçük bilgi ekranını kapatıyoruz... DEĞİŞİKLİKLERİ DEPOYA İLETME Örneğimizde index.php üzerinde biraz değişiklik yapacağız ve bu değişikliği depoya bildireceğiz. İndex.php'yi herhangi bir editör ile düzenliyoruz. İndex.php üzerindeki yeşil “ok” simgesi yerine kırmızı ünem geldi. Yani bu dosya şuan depo ile senkron değil. Değişikliği depoya bildirmek için Commit diyoruz. Bu örnekte yaptığım değişiklik ile ilgili bir yorum yazmadım ama siz siz olun yorum kısmına kodda nereleri değiştirdiğinizi yazın. Gün gelir geriye dönmek zorunda kaldığınızda can çekişmezsiniz :) Commit başarıyla yapıldı ve revizyon numarası güncellendi. PROJENİN GÜNCEL HALİNİ DEPODAN ÇEKME Ekip arkadaşlarımızda biz gibi dosya ekleyip depoya attığında bu değişiklikleri görmemiz için SVN Update dememiz gerekiyor. UYARI : Çalışmaya her başladığımızda mutlaka SVN Update ile güncel hali öncelikle kendi bilgisayarımıza indirmeliyiz. Aynı şekilde yaptığımız değişiklikleri de Commit ile depoya bildirmeliyiz. Arkadaşlarımızdan birisinin yeni dosya olarak baska-yeni-birdosya.php dosyasını eklediğini fark ediyoruz. DOSYA TAŞIMA / KOPYALAMA Bir dosya/klasörü bir yere klasik kes / yapıştır veya kopyala / yapıştır yapıp ardında Commit deseniz bile SVN bunu anlamayacaktır. Taşıma / kopyalama işlemi için bir öğeyi farenin sağ tuşuna basılı tutarak istediğimiz yere sürükleyip bırakınca karşımıza çıkan menüden istediğimizi seçiyoruz. Örnekte yeni-dosya.php'yi include klasörüne taşıyoruz. Bu işlemden sonra Commit demeyi unutmuyoruz. İpucu: Çalışma kopyası klasörünün ana dizininde boş bir yerde sağ tıklayıp Commit dersek tüm klasörü ( projeyi ) depoya bildirir. Yani farklı klasörlerdeki revizeler için tek tek Commit demeye gerek yok. Son olarak taşıma sonrasında Commit yapıyoruz. DEĞİŞİKLİKLERİ GERİ ALMA Yerel bilgisayarımızda yaptığımız değişiklikleri Commit demediğimiz sürece deponun bundan haberdar olamayacağından bahsetmiştik. Peki, Commit demediğimiz halde üzerine bir de Update dersek ne olur ? O kadar uğraştığımız yereldeki dosyanın üzerine depodaki hali yazılır mı ? Hayır ! SVN, yereldeki Commit'siz bu dosyanızın üzerine depodaki halini yazmaz... Update to revision ile de eski haline ( depodaki haline ) dönemezsiniz... Ya Commit yapıp son hali depoya bildirmelisiniz ya da Revert ile Commit'siz bu değişiklikleri geri almalısınız. Revert ile bu değişiklikleri geri almak istiyoruz. İSTENİLEN VERSİYONA GERİ DÖNME Her değişiklik sonrası bir numara verildiğinden bahsetmiştim. Bu şu demek ; SVN ehr olaydan sonra size geri dönüş için imkan tanır. Yani bir dosyanın istediğiniz versiyonuna erişebilirsiniz. Az önce index.php üzerinde yaptığımız değişiklik üzerine bir değişiklik daha yapalım... Commit esnasında yorum yazmayı unutmuyoruz. Daha sonrasında index.php üzerinde sağ tıklayıp Update to revision diyoruz. Açılan pencerede HEAD Revision dersek son haline, Revision kısmına numara yazarsak ilgili numaralı revizyona geri döneriz. Dosya üzerinde sağ tıkladığımız için bu geri dönüş sadece index.php de gerçekleşir. Show Log ile geçmiş kayıtları açıyoruz. 7 numaralı revizyon son revizyon, 4 numaralı revizyon ise ilk revizyonumuzdur. İşte yorumlar bu noktada çok işe yarıyor arkadaşlar... İpucu : Aradaki dosya farklarını görmek için Path kısmının altındaki dosya adına tıklayarak açılan ekranda dosyanın son hali ile ilgili revizyonu arasındaki farkları görebiliriz. 4'nolu revizyona geri dönmek istiyoruz... 4'nolu revizyonu işaretleyip tamama basıyoruz. İndex.php'nin revizyon 4'e geri dönmüş hali... DOSYA SİLME Dosya gezgininden direkt olarak dosya klasör silersek bu depoyu etkilemez. Commit desek bile... Böyle bir hatada yukarıda bahsettiğim gibi Revert ile dosyayı geri getirip, SVN ile tekrardan silmemiz gerekir. İstediğimiz dosyaya sağ tıklayıp Delete demek yeterlidir. Olmazsa olmaz Commit'i unutmuyoruz :) Commit başarıyla yapıldı... DOSYA KİLİTLEME Projede çok önemli bir dosya üzerinde çalışıyorsak bu dosyayı revizelere ya da silinmeye karşı koruyabiliriz. Kilit sistemi ile bu mümkün. Bu kilitli dosyaların kilidini kilidi koyan kişi kaldırabilir... Dosyaya sağ tıklayıp Get Lock demek gerekiyor. Belki not yazmak istersiniz. Mesela; neden kilitlediğinize dair. Dosyayı kilitleyen kişi kilidi kaldırabilir dedik. Bunun için Release Lock demek gerekiyor. Onay veriyoruz. Kilitli bir dosyayı diğer ekip arkadaşınız değiştirebilir, silebilir... Ancak sadece kendi yerel bilgisayarında yapabilir bunu. Hiç birini depoya yansıtamaz... ÇAKIŞMALARIN ÇÖZÜMÜ Muhtemelen başınıza en çok gelecek durumların birinden bahsetmek istiyorum... Akşam saat 6 oldu, siz evinize gidiyorsunuz. Ancak işkolik arkadaşınız hala ofiste... O akşam 9-10'a kadar dosyalar üzerinde çalıştı ve Commit yaptı. Sabah işe geldiniz ve Update yapmadan siz de kendi değişikliklerinizi yaptınız... Ve olayın farkına vardınız ! Muhtemelen o an aşağıdaki gibi olacaksınız... :) Dosyayı bu halde Commit yapamazsınız çünkü depodaki versiyon sizin yerel bilgisayarınızaki versiyondan daha güncel. Eski versiyonu yenisinin üzerine yazamazsınız. Peki ne olacak şimdi ? Tamam'a bastığınızda aşağıdaki uyarıyı alırsınız. İki seçenek sunar; “boşver Bir şey yapma” veya “bir uğraşalım bakalım” Update'ye basarız. Sonrasında şu pencere çıkar karşınıza... Çalışma kopyası ana dizinine bir bakarsanız aslında tüm maceranın yeni başladığını görebilirsiniz... .mine , .r7 ve .r8 uzantılı 3 dosya daha oluşmuş durumda. Şimdi bu dosyaları editörde tek tek açıp ne anlama geldiklerine bakalım. Not : Yerel bilgisayardaki .php dosyamızın içi boş durumdaydı... baska-yeni-bir-dosya.php Bu dosya hem bizim hem arkadaşımızın revizelerini içeren, başında ve sonunda SVN'in yorumlarını da içeren dosyadır... baska-yeni-bir-dosya.mine Bu dosya ise sadece bizim revizelerimizi içerir. baska-yeni-bir-dosya.r7 Bu dosya yerelimizde bulunan eski versiyon halidir. ( içi boş olduğunu söylemiştik ) rx şeklinde sonraki rakam değişkenlik gösterir... baska-yeni-bir-dosya.r8 - Bu dosyada ise sadece arkadaşımızın revizesi olmakla beraber depodaki son versiyonu durumundadır. Bu karmaşıklığı çözmek için orijinal dosyamıza ( php uzantılı ) sağ tıklayıp Edit Conflicts dememiz gerekiyor. Açılan TortoiseMerge içerisinde bizim,arkadaşın ve birleşmiş dosya haini görüyoruz. Birleşmiş dosya kısmı boş, çünkü bu yerleşimi biz yapacağız. isteğe bağlı olarak – Sağ kısımdaki bizim ( mine ) kısımdaki kırmızılı kod bloğuna sağ tıklayıp “onun kodundan önce benim kodu koy” diyerek ilk birleştirme işlemine başlıyoruz. ( aşağıdaki fotoğraf ) Ardından, sol kısımdaki arkadaşın revizesindeki kırmızılı kod bloğuna “bu bloğu kullan” diyerek birleşimi sağlıyoruz. Emin olun bu iş bu kadar basit değil. Binlerce satırın olduğu, bol bol revizelerin olduğu kodu birleştirmek zaman alır. Siz siz olun “işlemden önce update yapmayı” aklınızın bir köşesinden çıkarmayın... Alttaki birleşmiş dosya kısmında kırmızılı satırlar yok olduktan sonra sol üstteki saveye bastığımızda aşağıdaki ekran çıkar. Mark as resolved dersek dosyadaki çakışma giderilmiş olur. Son olarak Commit demeyi unutmuyoruz. :) Bu kadar uğraştan sonra bir de yorumumuzu yazalım Commit ederken. Okuduğunuz için teşekkür ederim. Elimden geldiğince TortoiseSVN' anlatmaya çalıştım. Ben Samet Özden. Bu makaleyi nasilanlatsam.com sitesinde yayımlanmak üzere yazdım. Lütfen paylaşım esnasında emeğe saygı gösterelim...