Git ve Github Farklı
Github: Gitlab, bitbucket gibi yazılımcıların kodlarını depoladığı bulut sistemlerinden biridir. Bu sayede internetinizin olduğu her yerde yüklemiş olduğunuz dosyalarınıza ulaşabilirsiniz. Drive yapısı gibi düşünün ama burası yazılımcıların ve burada kodlar var:)
Git: Linus Torvalds tarafından 2005 yılında geliştirilen açık kaynak olan bir versiyon kontrol sistemidir. Version Kontrol yapısını şöyle düşünebilirsiniz. Kodlarınızı yazdınız ve commit edip pushladınız. İşte bu sizin ilk versiyonunuz. Bu olay devam ettikçe de 2. versiyon, 3. versiyon şeklinde devam edebilirsiniz. Attığınız commitler sayesinde de o versiyonların ne ile ilgili olduğunu anlayıp dilediğiniz takdirde o versiyona dönebilirsiniz.
Version Control System(VCS) nin Faydaları:
- Yedekleme
- Dilediğiniz versiyona geri dönme
- Zaman içerisindeki değişiklikleri karşılaştırmamızı sağlar. Projenin nasıl evrildiğini bu şekilde görebilirsiniz.
- Versiyonların düzgün bir şekilde takip edilmesini sağlar.
- Uyumlu ekip çalışmasını sağlar.
- Eğer vcs kullanmazsak farklı kişilerle aynı dosyalar üzerinde çalışma durumunda sorunlar çıkabilir.
Artık Kurulum
Öncelikle git’i şu adresten işletim sisteminize uygun olan kurulum dosyasını indirerek kurmalısınız. Daha sonra ise artık yapılandırma kısmına geçelim…
Yapılandırma
Aşağıdaki adımları kendinize uygun olarak takip edip yapılandırmanızı yapabilirsiniz.
DipNot: Yapılandırmayı yapmadan git komutlarını kullanamazsınız!!!
Kurulumu bitirdiğimize göre, artık git komutlarına ısınmaya başlayabiliriz.
- ls -> içerisinde bulunduğunuz dizinde olanları size listeler.
- cd -> change director olan bu komut adından da anlaşılacağı gibi dizin değiştirmek için kullanırız.
- cd .. -> Bir önceki klasöre geri döner.
- pwd -> olduğunuz dizini gösterir
Linux işletim sistemi ile komutlar neredeyse aynı.
Kolay Yol: Bunlar ile uğraşmak yerine direkt hangi dosya ile çalışacaksanız, dosyanın içinde git bash çalıştırabilirsiniz.
Github da iki farklı yol ile çalışabilirsiniz.
- Remote repo ile direkt çalışmaya başlayabilirsiniz.
- Local ile çalışmaya başlayıp daha sonra remote repoya gönderebilirsiniz.
Repolarla çalışmaya başlamadan önce değinmem gereken bir konu daha var.
“.gitignore” -> Git veritabanı bunu kayıt etmeyecek anlamına gelir. Projeye başlamadan önce nelerin kaydetmek istemediğinizi düşünüp ve bunları bu dosyaya yazarak başlamak daha sağlıklı. Bunu internetten bulabilirsiniz. “Kullandığınız_Dil .gitignore template” şeklinde.
Ek Bilgi: Android-kotlin kullanıyorsanız gelen .gitignore dosyasında default olarak takip edilmemesi gerekenler var. Buna ekleme yapabilirsiniz ya da direkt bu şekilde de kullanabilirsiniz.
1) Remote Repo İle Çalışmak
Bence en sağlıklı yöntem direkt remote repo ile çalışmak. Özellikle de yeni başlıyorsanız. Github da repository oluşturunca aşağıdaki gibi bir sayfa göreceksiniz. SSH kısmı kopyalayın
Masaüstünüzde git bash ‘i açın ve aşağıdaki gibi git clone komutunu çalıştırın.
Artık uzak repo ile çalışabilmenizi sağlayan dosya masaüstünüze geldi. Dilerseniz direkt bu dosyanın içine projenizi oluşturup çalışabilirsiniz yada bir dosya daha oluşturup onun içine projenizi oluşturabilirsiniz Burası tamamen Github da oluşturduğunuz reponun nasıl design edeceğiniz ile ilgili.
Belli bir aşamaya kadar kod yazdınız ve şimdi ise artık bunu Github’a yükleme işlemi kaldı. Bunun için sırası ile kodlar:
- gitt add *
- git commit -m “Say something”
- git push -u origin main
Bu kodları Github’a bir şey yollamak istediğiniz zaman tekrar ve tekrar kullanmalısınız. Bu kısımda önemli olan şeyler ise:
- git commit -m “ ” kısmında tırnak işareti arasına o kod ile ilgi bir şeyler girilmesi version değiştirirken hatırlaman için iyi olacaktır.
- git push -u origin main kısmında main bizim branch adımız ve aşağıdaki görselde de parentez içinde görüyorsunuz. O kısımda ne yazıyorsa o şekilde yazmalısınız.
Kodu geliştirip, Github’a tekrar gönderdikten sonra
- git log -> commit lerinize bakabilirsiniz. Bu değişikliği kimin yaptığını, ne zaman yaptığını görebilirsiniz.
- git checkout -> Dilerseniz o versiyonlara geri dönebilirsiniz. O kısımda yapmış olduğunuz kodları görebilirsiniz.
Senaryo1:Diyelim ki kodu yazdınız ve Github’a kaydettiniz ama yanlış yaptığınızı önceki versiyona dönüp oradan çalışmanın daha doğru olduğuna karar verdiniz. Yani kısacası sondaki versiyonunu silmek istiyorsunuz. Yukardaki görseldeki git kodunu yazıp yanına hangi versiyonu silmek istiyorsanız commit inizin id sini girmeniz yeterli. Bu kısım localden siliyor, 2. satırdaki kod ise bunu remote repository inizden siler.
Senaryo2: Bazen Github’a dosya atarken isimlere çok özen göstermeyiz. Sonrasında bu ismi değiştirsem çok iyi olur deriz. Bunu yapmanın farklı yolları olsada genelde çoğu dosyayı duplicate yapıyor. git mv DosyaAdınız tepname && git mv tepname YeniDosyaAdı kodu ile bu işi halledebilirsiniz. Daha sonra bunu yukardaki gibi kullanıp Github’ınız da da değiştirebilirsiniz.
2) Local Repo ile çalışmak
- git init -> local repository oluşturur.
Daha sonra belli bir kod yazdıktan sonra git add ve git commit komutlarını kullanabilirsiniz. Kodunuzda değişiklik yapıp kaydetmek istedikçe bu komutları kullanabilirsiniz. Burada git push -u origin master komutunu henüz kullanmıyoruz.
- git status komutu ise code da değişiklik yapıp yapmadığınızı görmenize yarar.
- git log -> Bu komutu tekrar edecek olursak, git add dedikten sonra 1 tane commit görürken bu yolladığımız kodları commitlediğimizde ise 2 tane commit görüyoruz. Kısacası yolladığımız commitleri gösterir.
Artık bu kodları Github’a yollayalım. Bunun için Github’dan bir repo açmalısınız. Daha sonra ise;
- git remote add origin github_repo_link yaparsanız bir sıkıntı olmadan local git ile remote gite bağlamış olursunuz. Daha sonra ise bildiğimiz kodlar ile devam edebiliriz.
- clear -> ekranda görünenleri temizler.
Github da REDME dosyasına bir şeyler ekleyebilirsiniz yada ortak bir projede çalışıyorsundur, karşı taraf Github’daki repoya bir şeyler eklemiştir. Bu durumda daha önce local’inize bu repoyu indirmiş olsanız da Github’da değişiklik varsa git komutlarını çalıştıramazsınız ve hata verir. O yüzden Github’da olan bu değişikliği localinizde ki repoya bildirmelisiniz. İşte bunun için kullandığımız kod ise git pull. Ya da localinizdeki bu repoyu silin ve Github’dan tekrar clonlayın.
- git fetch + git merge = git pull . git pull bu iki komutu da karşılıyorsa neden git fetch var sorusuna da bazen merge etmeden hangi dosyalar üzerinde değişiklik yapıldığını görmek isteriz.
- git commit -a -m “write something” = hem ekleme hemde commit işlemini aynı anda yapar(git add * +git commit -m “write sommething”).
Senaryo3: Diyelim ki commit işlemini yaptınız. Ama yaptığınız commit o kodu iyi bir şekilde tanımlamıyor ve son yaptığını commiti değiştirmek istiyorsunuz. İşte bunun için kullanacağınız kod:
- git commit — amend -m “Write something right” Bunu yazdığınızda artık buradaki commit’iniz Github’da görünecek.
- git checkout ile branchler arasında gidip geldiği gibi aynı zamanda commitler arasinda da gidip gelebilirsiniz.
- git branch -> local deki branchleri gösterir.
- git branch -a ->Tüm branchleri gösterir(Local+Remote)
- git branch branch_name ->Localde o isimde bir branch oluşturur.
- git checkout branch_name -> O branch’e geçmemizi sağlar.
- git push origin branch_name -> Remote o branch’i gönderir. Artık Github sayfasında da bu branch’i görebiliriz.
Not: git branch dediğimizde yeşil ile yazılan kısım o branch’de olduğumuzu gösterir.
Artık sum branch’inde master branch’inde bulunan kodlar var. Artık ortak çalıştığınız projede farklı brancler üzerinde çalışabilirsiniz. Yazdığınız kodları hangi branch’e yolluyorsanız , sadece o branchte olacak.
Farklı branch’ler oluşturduk ve sum branch’ine kod güncellemesi yaptım. Artık merge edeceğim. Yani sum branch deki bu değişiklikler master branch’inde de olsun istiyorum.
- git merge branch_name1 branch_name2 -> Localde branchleri birleştirir.
- git push origin master -> Artık Remote da da branchler birleşmiştir.
2 branch de de aynı kodlar varsa oluşturduğumuz branch’i silebiliriz!!
Öncelikle hangi branch’i sileceksek diğer branch’e geçelim.
- git branch -D branch_name -> Localden bu branch’i siler
- git push origin :sum -> Remote dan bu branch’i siler.
git branch -a ile kontrol ettiğimizde artık sadece master branch in var olduğunu görürüz.
Conflict: Kelime anlamı çatışmadır. Farklı branchleri merge ederken aynı kod üzerinde farklı işlemler olduysa. Github bunlardan hangisini dikkate almalı. Burada artık Allah yardımcınız olsun :)
Pull Request: Mantık olarak merge ile neredeyse aynı. Burada birleştirme işini başkası yapıyor sadece.
pull request yapabilmek için öncelikle fork etmelisiniz. Sonra localde bu kodu geliştirip kendi remote attıktan sonra pull request yapabilirsiniz. Burada dikkat etmeniz geren tek şey your_github_name wants to merge … kısmının yanındaki yerin Open olması.
Sözlerimi bitirmeden önce şunu rahatlıkla söyleyebilirim ki iyi bir github kullanıcıysanız, aynı zamanda iyi bir yazılımcısınızdır.
Okuduğunuz için teşekkür ederim, başka bir yazıda görüşmek üzere…