Eki 04

Uzun zamandır SVN‘den Git‘e geçiş yapmak istiyordum. Bugün biraz kurcalamak için vaktim oldu. Bu yazıda Windows üzerinde bir Git Repository’si nasıl kullanılır ve Internet üzerinden diğer arkadaşlarınızla aynı repository’i nasıl paylaşabilirsiniz bunu anlatmaya çalışacağım. Ben online kısmını çözene kadar 2-3 saat bir süre geçtiği için yazma ihtiyacı hissettim.

Öncelikle konuya yabancı olanlar için küçük bir açıklama; Repository kullanmak; temel olarak çalışma dosyalarınız üzerinde versiyonlama yapmanıza yarar. Bu özellik yazılımcılar açısından çok çok büyük bir önem taşımaktadır. Çünki bu sayede yazılım kodu içerisinde istediğiniz bir saate/güne geri dönebilirsiniz. Bu özelliğin internet/network üzerinden kullanılması ise birden fazla kişinin aynı proje üzerinde çalıştığı ortamlar için yine büyük yararlar sağlamaktadır. Kodlarınızı takım arkadaşlarınız ile paylaşabilir ve herhangi bir hata/bug halinde hatalı kısmı bulma/düzeltme işlemini kolaylıkla yapabilirsiniz.

Bu tür -özellikle- açık kaynak kodlu projeler genellikle unix tabanlı sistemler üzerinde geliştirildiği için subversion uygulamaları da yine unix bazlı sistemler üzerinde yaygın. Fakat Windows kullanıcıları da unutulmamış tabi. Ben uzunca bir süredir SVN için TortoiseSVN’i kullanıyordum. Git için de yine TortoiseGit kullanmaya karar verdim.

Bilgisayarımıza Gerekli Programların Kurulumu

Git kurabilmek için öncelikle bu linkten TortoiseGit ve bu linkten MsysGit programlarını indirip bilgisayarınıza kurmanız gerekiyor.

01-tortoise-git-download 02-msys-git-download

Tortoise Git ve MsysGit Download Ekranları (işletim sisteminize göre uygun versiyonu indirebilirsiniz. TortoiseGit x64 destekliyor.)

Unfuddle Hesabı Açmak

Kurulum yapılıp bilgisayarımızı restart ettikten sonra sıra unfuddle.com üzerinden kendimize bir hesap açmaya geliyor. Hesap açma sırasında çeşitli paketler mevcut. Denemek için ücretsiz paketi kullanabilirsiniz. 200MB disk alanı ve iki kullanıcı ile limitli oluyorsunuz.

03-unfuddle-signup-packet 04-unfuddle-signup

Unfuddle paket seçimi ve hesap oluşturma ekranları

Unfuddle hesabımızı başarıyla açtıktan sonra Dashboard ekranı karşımıza geliyor.

05-unfuddle-dashboard

Unfuddle Dashboard Ekranı

Unfuddle hesabınız açıldığı anda otomatik olarak yeni bir proje açılıyor. Bu projenin ismini istediğiniz gibi değiştirebilirsiniz.

Şimdi sıra online repository oluşturmaya geldi. Unfuddle üzerinde “Repositories” menüsü üzerinden kendimize yeni bir repository oluşturuyoruz.

06-unfuddle-repository-create 07-unfuddle-repository-created

Unfuddle Repository oluşturma menüleri

Repository oluştururken “Abbreviation” seçeneği repository’nizin url’de görünecek değeridir. Type olarak ta “Git” seçmemiz gerekiyor. Repository’i oluşturduktan sonra ikinci ekran görüntüsünde de göreceğiniz gibi unfuddle bize bir url adresi oluşturuyor.

Bilgisayarımızda Çalışma Alanı Oluşturmak

Diskimiz üzerinde yeni bir klasör oluşturuyoruz. Bu klasör içerisinde aynı zamanda Git’in lokal repository’si de yer alacak. Git sisteminde hem lokal hem de internet üzerinde iki repository kullanılıyor. Klasörümüzü oluşturduktan sonra üzerinde sağ tıklayarak çıkan menüden “Git Create repository here” seçerek bu klasör içerisinde Git repository’sini oluşturuyoruz.

08-workdir-repository-created

Lokal disk üzerinde repository oluşturmak

Private Public RSA Key Oluşturmak

Git unfuddle’daki online repository ile konuşurken bir RSA anahtar çiftine (private/public key pair) ihtiyaç duyuyor. Böylece internet üzerinden giden bilgiler de şifrelenmiş oluyor. Bu anahtar çiftini oluşturabilmek için bilgisayarımıza kurmuş olduğumu Git tool’larını kullanıyoruz. Anahtar çiftini saklıyacağımız klasör üzerinde sağ tıklayarak çıkan menüden “Git bash here” seçiyoruz ve Git’in shell ekranı açılıyor.

09-start-git-bash 10-create-ssh-key

Git Bash penceresi açmak ve ssh key üretmek

Git komut ekranından aşağıdaki komut yardımıyla anahtarımızı oluşturuyoruz. Yukarıdaki ekran görüntüsünden seçenekleri görebilirsiniz.

ssh-keygen -t rsa

örneğimizde dosya ismi olarak “git-test” kullandık. Bu işlemi yaptığımı klasör içerisinde “git-test” ve “git-test.pub” isminde iki dosya oluştu. Key üretilirken aynı zamanda size şifre de soruluyor. Eğer burada bir şifre tanımlarsanız her comit işleminde bu şifreyi girmeniz gerekir. Kaynak kodlarınız üzerinde ciddi bir güvenlik kontrolü istiyorsanız burada şifre vermenizi tavsiye ederiz.

Sıra puttygen ile private key oluşturmaya geldi. Ben kurulum esnasında TortoiseGit için ssh client olarak putty seçmiştim. (Aradaki farkı bildiğimden değil, sırf “önerildi” diye). Bu yüzden online repository ile transfer yapılırken putty private key’ine ihtiyacımız olacak. Bu key’i üretmek için de TortoiseGit araçları içinden “Putty Key Generator” isimli programı kullanacağız. Programa başlat menüsünde “TortoiseGit” içinden ulaşabilirsiniz.

Programı çalıştırdıktan sonra “Load” butonuna basarak biraz önce ürettiğimiz “git-test” isimli private key dosyasını seçiyoruz. Eğer şifreli olarak ürettiysek dosyayı açarken şifreyi soracaktır. Key yüklendikten sonra “Save private key” butonu ile “git-test.ppk” ismiyle aynı klasöre kaydediyoruz. Bu aşamada Putty Key Generator ile başka bir işlem yapmamıza gerek yok. Programı kapatabiliriz.

11-create-putty-key-load 11-create-putty-key-save

Putty Key Generator yükleme ve kayıt işlemleri

Anahtar çiftlerimiz de hazır olduğuna göre şimdi sıra online repository’yi lokal repository ile konuşturmakta. Bunun için lokal çalışma klasörümüz üzerinde sağ tıklayarak “TortoiseGit” menüsünden “Settings”e geliyoruz. Açılan pencerede “Git / Remote” bölümüne gelerek “Add New” butonuna basıyoruz.

  • Remote kısmına online repository için bir tanımlama yapıyoruz. Örneğimizde “unfuddle-ghostrider” kullandık
  • Url kısmına unfuddle üzerinde biraz önce oluşturduğumuz online repository’nin url adresini yazıyoruz. örneğimizde “git@ghostrider.unfuddle.com:ghostrider/gitdoc.git” kullanıldı
  • Putty Key kısmına ise “Putty Key Generator” ile oluşturduğumuz “private key” dosyamızı tam dosya yolu ile yazıyoruz.

12-tortoise-create-remote-config

Git Remote Settings seçenekleri

“OK” seçerek değişiklikleri kaydediyoruz. Bu işlemin ardından lokal repository’miz için upstream server ayarını yapmamız gerekiyor. Daha önce açmış olduğumuz Git Bash Shell komut ekranına geliyoruz ve aşağıdaki satırı yazıyoruz.

git config remote.unfuddle-ghostrider.push refs/heads/master:refs/heads/master

bu komuttaki kırmızı ile işaretlenmiş satır Git Remote Settings sayfasında Remote için tanımladığımız değer olmalı.

15-git-set-as-upstream-server

Upstream Srever tanımlaması

Sıra unfuddle üzerinde public key’imizi tanımlamaya geldi. unfuddle’daki sayfamızı açıyoruz ve sağ üstteki “Personal Settings” sayfasına giderek en alttan “New Public Key” linkine tıklıyoruz. Açılan menüye anahtarımız için bir isim verip alttaki Value kısmına biraz önce oluşturduğumuz “git-test.pub” dosyasında bulunan (notepad ile açabilirsiniz) public key satırını yapıştırıyoruz.

13-unfuddle-create-key 14-unfuddle-key-pasted

Public Key’i unfuddle’a tanımlamak

İlk Commit

Sonunda bu karışık tanımlama işleri bitti. Artık çalışmaya başlayabiliriz. 🙂

Çalışma klasörümüz içerisinde projemiz ile ilgili dosyaları kopyalıyoruz. Projenize dahil olan dosyaları istediğiniz klasör yapısı ile içeri alabilirsiniz. Dosyaları kopyaladıktan sonra ilk yapmamız gereken işlem lokal repository’mize comit etmek. Bunun için klasöre sağ tıklayıp açılan menüden “Git Commit -> master” seçiyoruz.

16-git-commit-to-master

Lokal Repository’e comit etmek

Açılan pencerede üzerinde değişiklik yapılan/eklenen/silinen dosyalar listeleniyor. Burada istediğimiz dosyaları seçerek repository’e gönderilmelerini sağlamış oluyoruz. Dikkat etmemiz gereken nokta her comit işlemi sırasında mutlaka bir not yazma zorunluluğu. SVN’de iken tembellikten dolayı yazmadan geçebiliyorduk. Burada zorunlu tutulmasına bu yüzden çok sevindim. Tabii isterseniz “Sign” butonu ile imzanızı da atabiliyorsunuz.

17-git-commit-to-local

Lokal Comit Ekranı

Bu şekilde istediğiniz her periyotta çalışmalarımızı lokal repository’ye comit ediyoruz. Böylece her comit ettiğimizde çalışmamızın o anki hali versiyonlanmış oluyor.

Online Repository İle Senkronizasyon

Artık çalışmalarımızı online repository’mize gönderebiliriz. Böylece takım arkadaşlarımız da projenin son güncellenmiş halini kendi repository’lerine alabilirler. Bunu yapmak için çalışma klasörümüz üzerinde sağ tuşa basarak açılan menüden “Git Sync..” seçiyoruz. “Remote Url” kısmına biraz önce tanımladığımız Remote değerini gireceğiz. Örneğimizde unfuddle-ghostrider idi. “AutoLoad Putty Key” seçeneğini aktif hale getiriyoruz ve

“Push” butonu ile lokal ve remote repository’nin senkronize olmasını sağlıyoruz. Adından da anlaşıldığı gibi “Push” lokali online’a gönderiyor. Aynı şekilde “Pull” ise online’daki değişiklikleri lokale almamızı sağlıyor.

19-push-to-unfuddle 21-push-to-unfuddle-done

Git Sync – Push işlemi

İlk Kontrol

Bütün herşey bittikten sonra uunfuddle üzerinde repository’mize tıkladığımız zaman dosyalarımızı görmemiz gerekiyor. Zaten başarısız bir push işleminde hata mesajları ile karşılaşıyoruz. unfuddle üzerinde tanımladığımız alt kullanıcıların mutlaka repository üzerinde gerekli izinlerinin olmasına dikkat etmemiz gerekiyor. Aksi takdirde comit işlemleri başarısızlıkla sonuçlanıyor.

22-unfuddle-repository-browse

unfuddle üzerinde repository’i listelemek

Sonuç:

İlla takım çalışması şart olmasa da çalışmalarımızı versiyonlamak ve online olarak sürekli yedeğini tutmak çok önemli bir nokta. Git ve unfuddle.com bize bu noktada çok büyük kolaylık sağlıyor. Bu yazıda basit hatları ile bu konfigürasyonu nasıl sağlayacağımızı kabaca anlatmaya çalıştım. Mutlaka eksikleri vardır. Konu ile ilgili bir sorununuz olursa elimden geldiği kadarı ile yardımcı olmaya çalışırım. Ama şimdiden söyliyeyim; bu konfigürasyonu sadece bir gündür kullanıyorum 🙂

-AliAltanSaka, Ekim 2009

İlgili Siteler:

Tortoise Git (Google Code) – http://code.google.com/p/tortoisegit/

MsysGit (Google Code) – http://code.google.com/p/msysgit

Unfuddle – http://www.unfuddle.com

Share on FriendFeed

3 Comments

Leave a Reply

You must be logged in to post a comment.

Additional comments powered by BackType