GIT Versiyon Kontrol Sistemi ve GitHub nedir? Nasıl kullanılır?
Bu makalemde herhangi bir yazılım projesi geliştirirken sıkça kullandığımız github ve git nedir? Neden kullanılır? Nasıl kullanılır? Sorularını açıklamaya çalışacağım. O zaman git ile başlayalım. 🚀
GIT Nedir?
Git, yazılım geliştirme süreçlerinde kullanılan, hız odaklı, dağıtık çalışan bir sürüm kontrol ve kaynak kod yönetim sistemidir. İlk sürümü Linux çekirdeği’nin geliştirilmesinde kullanılmak üzere 2005 yılında bizzat Linus Torvalds tarafından tasarlanıp geliştirilmiş, 2019 yılı itibarıyla %70 pazar payına ulaşmıştır.(Vikipedi)
Yukarıdaki indirme(downloads) linki ile işletim sisteminize uygun git sürümüne tıklayarak .exe dosyasını indirip, varsayılan(default) ayarlarda değişiklik yapmadan next->next ile kurulumu tamamlayabilirsiniz. Ayrıca, “Neden ‘Git’ adı?” sorusuna buradan cevap bulabilirsiniz.
Peki Neden Versiyon Kontrol Sistemi Kullanmalıyız?
- Birden fazla kişinin çalıştığı takım projelerinde; projedeki değişiklikleri, kimin neyi ne zaman ekleyip çıkarttığı takibini yapmamızı sağlayarak proje geliştirme süreçlerini kolaylaştırır, gelişimin hızlanmasını sağlar.
- Projede geliştirme yaparken, git’in commit özelliği ile aldığımız anlık görüntülerle(SnapShot) kodumuzda yaptığımız değişiklikleri kontrol altında tutmamızı sağlar.
- Projede hatayla karşılaştığımız durumlarda commit ettiğimiz eski kod kaydına dönmemizi sağlar.
GIT Bash ile GIT Temel Komutları
GIT temel komutlarını kullanabilmek için Mac OS X’de Terminal uygulamasını, Windows’da ise GIT Bash’i açarak aşağıdaki komutları çalıştırmanız gerekir. Komut satırında Git komutları ile çalışmak göz korkutucu olabilir ama aşağıda açıkladığım komutlarla komut satırının göz korkutucudan ziyade eğlenceli ve kolay olduğunun düşünülmesini umut ediyorum.
Ayrıca Git’in komut satırı olmadan Git’i kullanmanıza izin veren birçok istemcisi vardır. Git GUI İstemcileri ile ilgili bulduğum Türkçe kaynağa buradan , İngilizce kaynağa da buradan ulaşabilirsiniz. İstemcinin arka planda hangi eylemleri gerçekleştirdiğini bilmek, Git’in nasıl çalıştığını anlamak açısından faydalıdır.
Devamında masaüstünde oluşturduğum git-example klasöründeki main.py dosyası ile Git komutlarını uygulamalı olarak açıklayacağım.
Git Bash’i açmanın bir diğer yoluda aşağıdaki görselde yaptığım gibi; proje dosyamızın olduğu klasörde sağa tıklayıp gelen seçeneklerden Git Bash Here’ü seçmektir.
Git Bash, Linux komutları ile çalışabildiğinden üzerinde çalışmak istediğiniz dosya yoluna cd Linux komutu ile gelebilir ya da klasör oluşturma işlemini mkdir Linux komutu ile yapabilirsiniz.
git init
Projenin bulunduğu dizine gelerek git init
komutunu çalıştırın. git init
komutu projeyi git ile versiyonlamanın ilk aşamasıdır. Henüz versiyon kontrolü altında olmayan bir projenin dizininde, boş bir git deposu oluşturmak için kullanılır. Bu kısımdan itibaren git projeye entegre edilir.
git config
GIT’in bir çok konfigürasyon ve ayarı vardır, bunlardan ikisi user.name ve user.email olanıdır. Bu ayarları yapılandırmak için aşağıdaki komutları kullanırız.
$ git config --global user.name "Name Surname"
$ git config --global user.email "test@email.com"
GIT’i ilk kurduğumuzda genellikle aldığımız ilk hata bu configurasyon ayarlarını yapmadığımız için gelir. Local depomuz ileuzak sunucuda bulunan depomuza(GitHub) bağlantıyı sağlamış oluyoruz. Burada yazdığınız isim ve email remote repository’miz olan GitHub hesabımızın kullanıcı adı ve mail adresidir.
git status
Her aşamada git status
komutunu çalıştırarak projenizin mevcut durumuna bakmamız mümkündür. Hangi branch’da olduğumuz, projede yapılan değişiklikler, eklenen ve silinen dosyalar gibi bilgiler listelenir veya attığımız commit’lerimize bu sayede hızlıca göz atabilir, kontrolünü sağlayabiliriz.
git status
komutunun sonucu kalabalık bir çıktı görebiliriz, eğer sadece projedeki değişikliği görmek istiyorsak git status -s
komutu ile daha özet bir bilgiye erişebiliriz.
git add
git status komutunun çıktısında da belirtildiği gibi oluşturduğumuz main.py isimli dosya şuanda untracked olarak gözükmektedir.
untracked (izlenmeyen): GIT tarafından henüz takip edilmeyen, yani yeni oluşturulmuş dosyaları ifade eder.
unstaged (hazırlanmamış): Güncellenmiş ancak commit’lenmek için hazırlanmamış dosyaları ifade eder.
staged (hazırlanmış): Commit’lenmeye hazır olan dosyaları ifade eder.
deleted (silinmiş): Projeden silinmiş ama GIT üzerinden kaldırılmamış dosyaları ifade eder.
git add
yeni eklenen veya üzerinde değişiklik yapılan dosyaları staged ortamına göndermek için kullanılır.
main.py gibi tek dosya değil de tek seferde bütün dosyaları eklemek için ise: git add *
ya da git add -A .
komutları kullanılır. Buradaki -A
(All) tümü anlamındadır. .
ise tüm dosya uzantılarını ifade eder.
Add işleminden önce kırmızı gözüken main.py dosyasının add işleminden sonra tanımlanıp yeşile döndüğü kontrolü için git status
komutunu kullandım.
git commit
git commit -m ’’first commit’’
staged ortamına alınan dosyaların Local Repository’e gönderilmesi işlemidir. En iyi uygulama yöntemi her kayıt sırasında yapılan değişiklikleri açıklayıcı bir mesaj eklemektir. Ayrıca her commit benzersiz bir kimliğe (unique ID) sahip olur. Bu sayede eski bir commit’e geri dönebilirsiniz ve herhangi bir kayıp yaşama ihtimaliniz kalmaz. Buradaki -m (message) mesaj anlamındadır.
Bir dili veya framework’ü yeni öğrendiğiniz zaman
commit
'leri akıllıca kullanmak işimizi oldukça kolaylaştırır. Çünkü eklediğiniz bir işlevsellik veya özelliği hatırlayacağınız bircommit
mesajıyla kaydetmek, GIT'in doğası gereği hangi satırlarda değişiklik yaptığınızı gösterdiği için tekrar kullanmak istediğiniz zaman eklemeniz gereken komutları hatırlamanızı kolaylaştırır.(kaynak)
git rm
git rm main.py
staged ortamına eklenmiş bir dosyanın silinmesi yani deleted (silinmiş) hale getirilmesi sağlayan komuttur. Buradaki rm (remove) kaldırmak anlamındadır. Eğer silmek istediğiniz bir dosya değil bir dizin ise o zaman git rm -r dizin_ismi
komutu kullanılmalıdır.
git add ile staged ortamında bulunan dosyayı silmeden geri almak için
git reset main.py
komutunu kullanabilliriz.Yanigit reset
komutu dosyayı silmez. Sadece commit’lenmeye hazır durumda olma statüsünden çıkartır.
git log
Projedeki commit geçmişini görüntülememizi sağlar. Aşağıdaki görselde de gördüğümüz gibi commit’in; id’si, yazarı(config ile eklediğimiz username ve email), tarihi ve commit mesajı listelenir. Tek commit’imiz olduğu için bir commit’in id, yazar, tarih, mesaj bilgileri listelendi.
git push
Burada local depomuzdaki commitleri uzak sunucuda bulunan depomuza gönderme kısmını yapacağız. Remote repository yani uzak sunucuda bulunan depomuz githubda oluşturduğumuz repository.
Henüz remote repository’niz yoksa aşağıda GitHub kısmında anlattığım gibi GitHub profilinden repo oluşturup, reponun linknin olduğugit remote add origin http://uzak_deponun_adresi.git
komutu ile local deponuzu uzak sunucudaki depoya bağlayabilirsiniz. Ben örnek olarak github profilimde “git-example” isimli bir remote repository oluşturdum. Bana verdiği path “https://github.com/Meleknaz/git-example.git” şeklinde oldu.
- Local repository’de çalıştığım projeyi github üzerindeki remote repository’ye bağlamak için
git remote add origin http://uzak_deponun_adresi.git
- Local repository’de çalıştığım projeyi github üzerindeki remote repository’ye atmak için
git push origin master
komut satırlarını çalıştırmamız gereklidir.
Burada bahsi geçen
origin
remote repository’nin kök dizinini belirtir ve sabit bir isimdir.master
ise sizin çalıştığınız branch (dal)’ı belirtir.
git pull
Yazının başında da belirttiğimiz gibi üzerinde çalıştığınız projeye katkıda bulunan bir arkadaşınızın değişikliklerini remote repository’den kendi local repository’mize çekmemiz gerekebilir, bunun için kullanacağımız komut ise git pull origin master
‘dır. Bu sayede projenin en güncel hali local repository’mize tek komutla eklenmiş olur.
git branch
Local veya remote repository üzerinde yeni bir branch (dal) eklemek, silmek veya listelemek için kullanılır.
Burada öncelikle git branch
ile bulunduğumuz branch’i listeledik, git branch new_branch
ile yeni branch oluşturduk, git branch -a
ile tüm barch’leri listeledik(-a:all), git branch -d new_branch
ile new_branch’i silip(-d: delete) tüm branch’leri tekrardan listeliyoruz.
git checkout
Branch’ler arası veya commit’ler arası geçiş yapmak istediğimizde kullanılır.
Burada git checkout -b new_branch
ile yeni bir branch oluşturup, bu branch’a geçiş yapmaktık, git checkout new_branch
ile new_branch’e geçiş yapmak istedik ama zaten o branch’de olduğumuz uyarısını aldık, bizde git checkout master
ile master branch’e geçtik.Sonda yazan git checkout <commit_ID>
ile commitler arası geçişi sağlıyoruz.
git merge
Başka bir branch’da olan değişiklikleri, bulunduğumuz branch ile birleştirmek istediğimizde kullanılır.
git merge <branch_name>
git diff
Repository üzerinde yapılan değişikliklerden sonra dosyalar arasında oluşan farklılıkları göterir. Bu komut büyük projelerde dosyalarda yapılan değişiklikleri görmek önemli bir komutdur.
Commit’lenmiş ama henüz push edilmemiş dosyalarınız ile çalışma alanınız arasındaki farkları görmek içingit diff HEAD
komutunu kullanabiliriz.
Merak ettiğiniz tüm komutların sonuna -help yazarak o komut hakkında detaylı bilgiye ulaşabilirsiniz.
Ya da — help yazarak çok daha detaylı bilgiyi tarayıcınızda görüntülenmesini sağlayabilirsiniz.
Git ile ilgili yazacaklarım bu kadar ama yazının en altında verdiğim linkleri ziyaret edip farklı kaynakları da inceleyebilirsiniz. O zaman yazımıza GitHub ile devam edelim🚀
GitHub Nedir?
Evet artık yukarıda sıkça bahsettiğimiz uzak sunucudaki remote repository’miz olan GitHub’a geldik. GitHub, sürüm kontrol sistemi olarak Git kullanan yazılım geliştirme projeleri için web tabanlı bir depolama servisidir. 8 Şubat 2008 yılında Tom Preston-Werner, Chris Wanstrath, P. J. Hyett, Scott Chacon tarafından kuruldu. Vikipedi
GitHub yazılımcıların sosyal medyası olarak da düşünülebilir, dünya üzerinde github hesabı olan insanların profilinize public olarak eklediğiniz projenizi görme, inceleme, katkıda bulunma gibi özellikleri sağlar. Ayrıca GitHub üzerinde paylaşılan kodları inceleyip kendinizi geliştirebilirsiniz. Öncelikli olarak GitHub kullanabilmek için bir hesap oluşturmanız gerekmektedir. Buradan GitHub’a kayıt olabilirsiniz.
Eğer öğrenciyseniz ve GitHub’ın öğrencilere sağladığı birçok avantajdan ücretsiz haberdar olmak isterseniz okul mailiniz ile kayıt işlemini gerçekleştirmenizi ve aşağıdaki link ile bahsettiğim avantajlardan yararlanmanızı tavsiye ederim.
Eğer ben kendi okul dışı mail adresim ile kayıt olmuştum şimdi tekrardan okul mailim ile kayıt olup yeni bir hesap mı açmalıyım diye soranlar için de şunu söyleyebilirim ki hayır buna gerek yok. Bende GitHub’a gmail hesabımla kayıt olup arkadaşımın profilindeki havalı pro yazısı neden bende yok demiş ve nasıl ekleniceğini öğrenmiştim:)
Yukarıda da kırmızı ile işaretlediğim gibi settings->emails->add email address->primary email address->save ile okul mail ekleme işlemini yapabilirsiniz.
Artık bir GitHub hesabımız var sıra geldi profilimizi düzenleyip projelerimizi ekleyerek yetkinliklerimizi projeler ile ifade etmeye. Edit profile ile profil fotoğrafınızı ve belli biilgilerinizi ekleyebilrisiniz ama son zamanlarda trend olan profile README eklemenizi tavsiye ederim. Bunun için yazdığım yazıya aşağıdan ulaşabilirsiniz.😉
Bence artık hepimizin güzel bir GitHub profili oldu sıra repository eklemeye geldi.👀
Yeni Repo Açma
New diyerek proje repo’muza vermek istediğimiz isimle repoyu oluşturuyoruz. Ben yukarıda da belirttiğim gibi git-example isimli bir repo oluşturucam.
Repository name’i verdikten sonra projenin Public(github profilinizde herkesin gördüğü-gizli olmayan repo) mi Private(github profilinizde sadece sizin gördüğünüz-gizli olan repo) mi oluşturulacağını seçeriz. Bu özelliği öğrenci mailimiz sayesinde, Pro özelliği ile ücretsiz kullabiliyoruz.
Devamında, Add a README file(README dosyası ekleyin) seçeneğini seçip genelde projenin içeriğinin verildiği, nasıl çalıştırılacağının anlatıldığı bir Readme.md dosyasının oluşturulmasını sağlayabilirsiniz. Readme.md dosyasını sonradan da oluşturup içeriğini doldurabilirsiniz. Add .gitignore ile de git projemizde takip edilmesini istemediğimiz dosyalar varsa bu dosyaların ismini .gitignore dosyasına yazarak git tarafından takip edilmesi engelleyebiliriz. Choose a license ile seçtiğimiz lisans dosyası reponuzda bulundurduğunuz dosyaları kapsayan (aynı zamanda koruyan) lisansımızı içerir. Lisans ekleme zorunluluğu yoktur.Son olarak Create repository(Kod deposu oluştur) diyerek git-example repo’muzu oluşturuyoruz.
Burada README.md’nin git ile yüklenmesi açıklanmış. Verilen git komutlarının açıklamaları yukarıda mevcutdur.
Son olarak github daki bir projenin reposunu localimize yani bilgisayarımızı git ile clonlama kısmına değinmek istiyorum.Öncelikle projeyi clonlamak istediğimiz klasöre gelip sağ tık ->Git Bash Here ile git bash’i açıyoruz. Klonlamak istediğimiz projenin github sayfasından aşağıdaki görselde de belirttiğim gibi code kısmından HTTPS linkini kopyalıyoruz.
Kırmızı ile belirttiğim kısımdaki linki kopyalayıp git bash de git clone http://uzak_deponun_adresi.git
komutu ile clonlama işlemini tamamlıyoruz.Linkin altında iki farklı seçenekte sunulmuş biri GitHub desktop masaüstü uygulaması ile projeyi açmak diğeri ise proje dosyasını zip olarak indirmek.
git clone
https://github.com/Meleknaz/TOAFX-Mobile-Application-Version-1.gitGitHubdaki herhangi bir proje seçip, git-example klasörüne klon için git bash
git clone
https://github.com/Meleknaz/TOAFX-Mobile-Application-Version-1.git ile clonlama işlemini tamamladık.
Benim git ve github ile ilgili anlatacaklarım bu kadar, umarım faydalı bir yazı olmuştur. Yazıda anlaşılabilirliği arttırmak için düzenlememi, eklememi, çıkarmamı istediğiniz bir kısım ya da herhangi bir tavsiyeniz olursa iletişime geçmekten çekinmeyin.🙂👋
Kaynaklar
- https://www.patika.dev/egitimler/frontend-web-development-patikasi/git/git-bash-ile-git-temel-komutlari
- https://medium.com/fedeveloper/git-bash-ile-komut-komut-versiyonlama-a354efd3063f
- https://classroom.udacity.com/courses/ud123
- https://www.jrebel.com/blog/git-cheat-sheet
- http://guides.beanstalkapp.com/version-control/common-git-commands.html