Bir yazılım ekibinin git sürüm takip sistemini kullanarak ortak çalışması için pek çok senaryo var. Bu dokümanda örnek bir senaryo ile GitHub üzerinden sürecin nasıl işlediğini özetleyeceğiz.
Senaryomuz şu şekilde gelişiyor:
-
Gökhan isimli geliştirici
gdemir
isimli kendi GitHub hesabındauzem
adında bir proje oluşturuyor. Örneğin projeye aşağıdaki adresten erişebildiğini kabul edelim: -
GitHub hesap adı
roktas
olan Roktas isimli geliştirici bir aşamada projeye dahil olarak Gökhan ile birlikte çalışmaya başlıyor.
Projeyi oluşturan kişi Gökhan olduğuna göre Roktas öncelikle uzem
isimli
projeyi Gökhan'ın deposundan "fork" ederek almalı. Bu "fork" işlemi (ve
devamı) GitHub'ın yardım sayfasında
özetlenmiş. Buna göre:
-
Roktas Gökhan'ın hesabındaki proje sayfasına giriyor.
-
Proje sayfasında görülen "Fork" butonuna tıklayarak projeyi kendi hesabına klonluyor. Artık Roktas'ın hesabında
uzem
isimli bir depo var. -
Roktas GitHub üzerinde oluşturduğu bu yeni depoyu makinesine alıyor:
roktas$ git clone [email protected]:roktas/uzem.git
-
Roktas, kendi kopyası üzerinde çalıştığı esnada Gökhan'ın yaptığı yeni değişiklikleri takip etmek için deposunda örneğin
upstream
isimli bir dal oluşturarak bunu ilkliyor:roktas$ git remote add upstream git://github.com/gdemir/uzem.git roktas$ git fetch upstream
-
Roktas proje üzerinde bilinen şekilde çalışıyor. Yani kodlama yapıyor, değişikliklerini kaydediyor ve GitHub'taki deposuna gönderiyor:
roktas$ ... roktas$ git commit -a -m "falan düzeltme yapıldı" roktas$ git push origin master
Roktas'ın elindeki kopya GitHub'ın "fork" özelliğiyle Gökhan'ın kopyasından türetildiğinden, GitHub Roktas'a yaptığı değişiklikleri Gökhan'a iletmek için "Pull Request" adında bir kolaylık sunuyor. Buna göre:
-
Roktas kendi proje sayfasına girerek "Pull Request" butonuna tıklıyor.
-
Açılan ileti penceresindeki leti alanına uygun bir açıklama yazdıktan sonra Gökhan'a ve isteğe bağlı olarak diğer alıcılara "yaptığım değişiklikleri kendi deponuza alın" isteğinde bulunuyor.
-
Bu isteği alan Gökhan istekte belirtilen açıklamalara uygun şekilde Roktas'ın değişikliklerini kendi kopyasına uyguluyor.
Roktas proje üzerinde çalışırken Gökhan da kendi kopyası üzerinde bazı değişiklikler yapıyor olabilir. Roktas bu değişiklikleri şöyle almalı:
-
Roktas kendi kopyasını hazırlarken oluşturduğu
upstream
dalını kullanarak Gökhan'daki değişiklikleri indiriyor:roktas$ git fetch upstream
-
İndirilen değişiklikleri kendi kopyasıyla birleştiriyor:
roktas$ git merge upstream/master