Github - Nedir, Nasıl Çalışır, Nasıl Kullanılır?

    Yazılım geliştirmek ve üzerinde takım halinde çalışabilmek için geliştirilmiş, camiadaki en popüler ve kullanışlı platform, github, bu yazının konusunu oluşturmaktadır. Gerek kişinin yaptığı çalışmalarda izlediği adımlar, katettiği yollar hakkında kalıcı bir hafıza oluşturma gerekse bir bütün olarak anlam kazanan kod blokları arasında birden fazla kişinin senkronize olarak çalışabileceği dinamik bir editördür github.
    Ama github nedir sorusunu biraz daha detaylı incelemkte fayda var.

     GITHUB NEDİR?

    Github'ı kod saklama, izleme, geliştirme ve yönetme platformu olarak kısaca tanımlayabiliriz. Buradan ana sayfasına ulaştıktan sonra herhangi bir e-mail adresiyle üye olabilirsiniz. Üye olup giriş yaptıktan sonra sizi aşağıdaki gibi bir ana sayfa karşılayacaktır.


    MCYBA kendi kullanıcı adımdır ve githubın güzel özelliklerinden birisi olarak hiç kimseden izin almadan, paylaşmış olduğum kodları inceleyebilir ve bağlı oldukları lisans çerçevesinde kullanabilirsiniz.

Sonuç olarak github'ın ne olduğu konusunda fikrimiz net, kendisi bir kod paylaşma platformu ve bir çok kullanışlı ve harkulade özelliğe sahip. Peki bu özellikler nedir, ve...


     GITHUB NASIL ÇALIŞIR?

Çoğunlukla açık kaynak koda sahip, açık kaynak kod lisanslarından herhangi birisi ile koruma altına alınmış kodların bulunduğu bu platform, rahat anlaşılır ve takip edilir arayüze sahiptir.

Github'ın, github olmasını sağlayan en temel özellik ile başlayalım. "commit" kavramı.

       commit nedir?

    Türkçe karşılık olarak, "teslim etmek" yahut "kalkışmak" kelimeleri kullanılabilir ancak uluslararası geçerlilik düzeyinde anlatabilmek için bu ve bundan sonraki yabancı kökenli kelimeleri doğrudan kullancağım.
    Bir repository(kod deposu)'deki kodlara yapılan her bir yenilemei değişitrme, silme ya da ekleme işlemine verilen isimdir commit. Yani kendi repo'nuz yahut bir başka repoya yapacağınız katkıları commit'ler halinde iletirsiniz.


    Şimdi ise github üzerinde ortak bir kod üzerinde birden fazla geliştiricinin çalışabilmesinin anahtar kelimesi var; Pull Request'leri....

       pull request nedir?

    Çekme talebi ya da isteği de deniilebilir. Bir geliştirici, başka birisnin ya da grubun kodunu alıp o koda katkıda bulunmak istediği zaman, kod yazma işinden sonra hemen bir Pull Request(PR) açar.
   Bu şu demektir: "ben bir şeyler yaptım, kodumun çekilmesi istiyorum. İlgilenin lütfen." Kodun sürdürücüsü(maintainer) gönderilen bu PR'a bakar ve kodu gönderen ile aralarında bir iletişim başlar. İşte bu iletişim sırasında devreye conversation'lar giriyor...


       conversation nedir?

    Türkçe karşılığı "konuşma" olarak belirtilen bu kelime github'ta da aynı iş için kullanılmış. Herhangi birisi, bir PR'da bulunur, yahut kodu kullanırken bir sorun(issue) ile karşılaşırsa conversation blokları devreye girer.
    Geliştiricilerin birbirlerini anlamaları için sorunun bulunduğu yerde konuşabilmelerini sağlar. Onların konuşmalarını daha sonra okuyacak kişiler için de temiz ve anlaşılır bir zemin hazırlar.
   Nitekim Issue ve PR converation'ları birbirlerinden ayrıdır. Üstelik bu konuşmaları etiketlemek ve referans göstermek de mümkündür.

Asıl konumuza gelebiliriz artık nasıl işleiyor bu aynı kod üzerinde...
     Eş Zamanlı Çalışma?

    Hepsinden önce bir koda katkıda bulnabilmek(contribute) için o kodu fork'lamak gerekmektedir. Fork, türkçeye çatallaşma, yani yol ayrımına gitme olarak çevrilmiştir.
    Geliştirici, bir repo'yu ana kaynağından forklar. Bunu yapar yapmaz, github o repo'yu izleme altına alır ve ana repo ile bağlantısı yokmuş gibi forklanmış repo'yu referans kabul eder.

    Geliştirici fork'unu yaptıktan sonra kodlar üzerinde oynamaya başladığında artık yaptığı değişiklikler en baştaki ana repo bakımından github için önemli değildir. Önemli olan, fork repo'dur.
    Yani geliştirici bir değişiklik yaptıktan sonra kodları kendi forkladığı reposuna commit eder ve github'da o fork olan repo ile yeni gelen kodlar arasındaki farklılıkları, eklenenleri ve çıkanları ortaya koyarak repo'yu tek
rar şekillendirir.

    Şimdi farz edelim ki iki geliştirici aynı anda aynı repoyu forkladılar ve katkıda bulunmak için çalışmaya başladılar. İkisi de birbirini tanımıyor yahut birbirinin yaptıklarından tamamen habersizler.
    İkisi de bir çok değişiklik yapıyor ancak farklı zamanlarda PR gönderiyorlar. ilk gönderenin değişiklikleri kabul gördüğü zaman ana kod değişmiş oluyor. Peki ikinci geliştiricinin onca çalışması ne oldu şimdi? Ortaya çıkabilecek kargaşayı düşünün lütfen, birbirlerinin kullandığı kodları silmiş olabilirler veya yerini değiştirmiş olabilirler ya da bir sürü envai çeşit senaryo gerçekleşebilir.
    İşte bu nokta da github devreye giriyor. Geliştiriciler arasında herhangi bir sorun olmuyor çünkü koda yaptıkları eklememler ve çıkarmalar ana repo'dan bağımsız, kendi forkladıkları repo'ya bağımlı.
    Github sadece bu farklılıkları alıyor ve ana repoya götürüp yerlerini buluyor. koyuyor ve işine devam ediyor.

    Elbette bazen sorunlar olabiliyor. Github'ın anlayamadığı karmaşıklıklar falan. Buna conflict yani anlaşmazlık deniyor ve sonradan el ile düzeltilerek sorun ortadan kaldırılıyor. Ancak iş yükünün çok büyük kısmı github tarafından ortadan kaldırılmış oluyor. Geriye sadece birkaç düzeltme kalıyor.

Github'ın çalışma şekli böyle. Peki bu Github Nasıl Kullanılıyor?

    

     GITHUB NASIL KULLANILIR? 


     İstendiği takdirde doğrudan web arayüzü ile de geliştirme yapılabilir ancak bu ne çok efektif ne de çok tercih ediliyor. Geliştiricilerin, kendi rahat ettikleri yolları kullanarak github'a kod göndermelerini sağlamaya yönelik geliştirilmiş bir komut satırı programı mevcut.
     "git" denilen bu programı linux dağıtımlar altında;

-- $ sudo apt-get install git

komutuyla kurabilirsiniz. Windows altında çalıştırmak için ise işletim sisteminize minGW kurulumu yapmanız gerekmekte.

    git'i bilgisayara kurduktan sonra bir klasör oluşturup aşağıdaki komutları girdiğiniz zaman, github'a yüklenmeye hazır bir proje oluşmuş olacaktır:


bir de github üzerinde bu projenin bir karşılığını oluşturmak gerekmekte. onu ise github'ta repository'lerin bulunduğu sekmeden "new" butonuna tıkalyarak oluşturmaktayız.
 

    github üzerinde oluşturulmuş bir repo'yu bilgisayara çekmek için ise aşağıdaki kodu kullanıyoruz:

-- $ git clone https://github.com/USERNAME/REPONAME.git

burada USERNAME, repo'yu çekeceğiniz kullanıcının adı, REPONAME ise repo'nun adı olacak şekilde değiştirilmelidir.

    Şimdi geldik kod yazıp repo'ya göndermeye. Az yukarıda anlattığım commit'in yanında kullanacağımız üç komut daha var:

    İlki status. Bu komut klasörün, github üzerindeki repo ile etkileşiminin bilgilerini göstermeye yaramakta. Örneğin yukarıdaki "github_repo" klasörünün içerisinde "deneme.py" adında bir dosya untracked durumunda. Yani github serverlarındaki repo'ya henüz böyle bir dosya gönderilmemiş.
    add komutu: üzerinde değişiklik yapılan dosyaların değişikliklerini veya yeni yaratılan daysa ve klasörlerin kendilerini "commit" edilecekler listesine eklemeye yarayan komut.
    commit komutu: repo'da add komutuyla etiketlenen değişiklikleri commit eden komut.
    Ve son olarak da push komutu. Bu komut ise commit edilen değişikliklerin github'a push edilmesini yani ittirilmesini, gönderilmesini sağlayan komut.

Kullanılacak sırayı ise yukarıdaki örnekten devam edersek şu şekilde gösterebiliriz.:

-- $ git add deneme.py
-- $ git commit -m "MESSAGE"
-- $ git remote add origin https://github.com/USERNAME/github_repo.git
-- $ git push -u origin master

   Burada son iki satırı, eğer repo'yu github'a ikkez gönderiyorsak kullanıyoruz.

add komutu için

-- $ git add .

şeklinde de bir yol izleyebilrdik. "." şuanda içinde bulunulan dizi işaret eder. bu da demektir ki, şuan içinde bulunulan klasörün içinde ne var ne yoksa github'a gönderilmek üzere etiketlenecektir.
   Ayrıca commit komutunu "-m" ifadesi ile kullanmamızın sebebi ise yapılan commite bir mesaj, yorum ya da gerekçe yazabilmektir.

Nihayetinde çıktılar aşağıdaki gibi olacaktır:


Son komutu girdikten sonra resimle olmayan bir şekilde size kullanıcı adı ve şifre soracaktır. Şifrenizi girdikten sonra push işlemi başarıyla sonlanacaktır. Aşağıda sağda da dosyanın github'taki görünüşü bulunmakta. Buradan repoya ulaşabilirsiniz.


    Ehh, github işi de başlangıç seviyesinde bu kadar, squash, reword, hard reset gibi bir sürü kullanışlı ve kod yönetmee hakimiyetini arttıran komut mevcut ancak bu yazı için bu seviye yeterli.
    Daha sonraki bir yazımda daha detaylı kullanımı anlatabilmek dileğiyle esenlikte kalın.



Türkçe kaynakları zenginleştirme konusunda yardımcı olabilmeyi umdum. Faydasını görürseniz ne mutlu hepimize.


                                                                           Cem Baybars GÜÇLÜ


Dipnot:
    Değerli mentorlarımdan Mehmet Mert Yıldıran'ın yıllar önce hazırlamış olduğu github kullanımına ilişkin bir anlatım videosuna da buradan ulaşabilirsiniz. 



Yorumlar

Popüler Yayınlar