Merhabalar, git derslerimize devam ediyoruz. Bu dersimizde yerelimizde bir depo (repository) oluşturup bu depoya ilk git commit komutumuzu kullanarak ilk commitlerimizi yapacağız.
Derslerimizi bildiğiniz gibi terminal üzerinden gerçekleştiriyoruz. Windows kullanıyorsanız bir önceki dersimizde kurduğumuz Git Bash uygulamasını kullanabilirsiniz. Kurulum için bir önceki dersi ziyaret edebilirsiniz.
Git Dersleri Half Life 2 Story
Half Life 2, oyununu oynamayan yoktur. Git derslerimizde basit olması sebebi ile Half Life 2’nin senaryosunu yeni yazıyormuş gibi yapacağız. Bu senaryoyu da bir git deposunda versiyonlayalım. Oyunu daha önce oynamayan varsa spoiler uyarısını vermeyi de unutmayalım 🙂
Git Deposu (Repository) oluşturma
Daha önceki derslerimizde hatırladığınız gibi git dağıtık bir sistem. Dağıtık olması sayesinde herhangi bir uzak sunucuya ihtiyacımız yok. Yerelimizde de bir git deposu oluşturup bu depo üzerinde çalışabiliriz. Bir git deposu için öncelikle boş bir dizine ihtiyacımız var. Bilgisayarınızda dilediğiniz bir yere bir dizin (klasör) oluşturun. Ben unix tabanlı bir sistem kullandığım için bunu mkdir komutu ile gerçekleştireceğim. Windows kullananlar yine Git Bash ile mkdir komutunu kullanabilirler.
Geldik bu dizini depo yapmaya. Bu da dizin yaratmak kadar basit bir işlem. Komut satırından öncelikle oluşturduğunuz dizine gitmeniz gerekiyor.
Şimdi bu dizini bir git deposu haline getirelim.
Bu kadar basit! Artık dizinimiz bir git deposu haline geldi. Peki bu komut ne yaptı da burası bir git deposu haline geldi? Dizinin içerisine gizlenen dosyalarla beraber bakarsanız .git isimli bir dizine denk gelirsiniz. Bu dizin tarihçe (history) ile beraber yapılandırmaları vs. içerir.
Şimdi oluşturduğumuz deponun durumuna bakalım. Aşağıdaki komutu çalıştıralım.
Bunun sonucunda ekranda şöyle bir sonuç görürsünüz:
On branch master
Initial commit
nothing to commit (create/copy files and use “git add” to track)
Bu komut bize, master, dalında olduğumuzu (bir sonraki dersin konusu), depoyu yeni oluşturduğumuzu ve commit edilecek birşey olmadığını söylüyor.
Bir de git log komutunu verelim:
fatal: your current branch ‘master’ does not have any commits yet
Anladığınız gibi şu anda herhangi bir commit yapılmadığını görüyoruz.
Commit
Önceki derslerimizde de adından bahsettiğimiz commit kavramından bahsedelim. commit, VCS’lerin en temel kavramıdır. Önceki derslerde projemizin tarihçesini bir zaman tüneli gibi sakladığını söylemiştik. Basit bir insan hayatını bir zaman tüneli olarak düşünürsek şöyle bir liste yapabiliriz.
- X şehrinde doğdu, 1980
- ABC İlköğretim okuluna başladı, 1986
- ABC İlköğretim okulundan mezun oldu, 1994
- Y Lisesine başladı, 1994
- Y Lisesinden mezun oldu, 1997
- Z üniversitesinde *Makine Mühendisliği* bölümüne kayıt oldu, 1998
- Z üniversitesinden mezun oldu, 2002
- ACME şirketinde işe başladı, 2003
Burdaki listenin her elemanının VCS’deki karşığına commit diyoruz.
Bir de gerçek bir yazılım projesinden örnek verelim:
e83c516 Initial revision of “git”, the information manager from hell
8bc9a0c Add copyright notices.
e497ea2 Make read-tree actually unpack the whole tree.
bf0c6e8 Make “cat-file” output the file contents to stdout.
19b2860 Use “-Wall -O2” for the compiler to get more warnings.
24778e3 Factor out “read_sha1_file” into mapping/inflating/unmapping.
2ade934 Add “check_sha1_signature()” helper function
2022211 Add first cut at “fsck-cache” that validates the SHA1 object store.
7660a18 Add new fsck-cache to Makefile.
Yukarıda gördüğünüz commit’ler şu an öğrendiğimiz git‘in ilk commitleri (Evet, git’in kendisi de git ile geliştiriliyor.) ve gördüğünüz commit’ler Linus Torvalds tarafından yapılmış.
Git Commit
Gelelim bizim Half Life 2 projesine, şimdi bu proje üzerinde çalışalım. Aşağıdaki metini half-life-2 dizinine story.txt adı ile kopyalayalım.
Nearly twenty years after the Black Mesa Incident the G-Man wakes Gordon Freeman and inserts him (seemingly, without any goals) into a train arriving in City 17, a city under control of the Combine Empire located somewhere in Eastern Europe.
Nearly twenty years after the Black Mesa Incident the G–Man wakes Gordon Freeman and inserts him (seemingly, without any goals) into a train arriving in City 17, a city under control of the Combine Empire located somewhere in Eastern Europe. |
Not: Yukarıdaki işlemi manuel olarak , half-life-2 dizinine girip , story.txt adında bir dosya oluşturup , yine maneul olarak yapıştırabilirsiniz. Sonrasında kaydedip dosyayı kapatabilirsiniz.
git status komutunun sonucunda eklediğimiz dosya Untracked files: altında görünüyor. Ayrıca en altta nothing added to commit but untracked files present (use “git add” to track) yazıyor. Yani eklediğimiz dosya untracked file olarak tanımlandı.
Git, siz ona aksini belirtmedikçe dizindeki her dosyayı takip(track) etmez. git status komutunun bize verdiği bilgi ne yapmamız gerektiğini de söylüyor. Aşağıdaki komutu çalıştıralım.
Git’in staging olarak isimlendirilen bir çalışma akışı var. Bir commit işleminden önce, hangi dosyaları commit’e dahil edeceğinizi belirlemeniz gerekiyor. git add ile dosya sistemimizde bulunan story.txt dosyasını yapacağımız commit‘e dahil etmek istediğimizi belirttik. Şimdi tekrar git status komutunun sonucuna bakalım.
Gördüğünüz gibi untracked files yerine Changes to be committed: altında görüyoruz. Ayrıca new file* ibaresi de yer alıyor yani eklediğimiz dosyanın yeni olduğunu belirtiyor.
İlk commit’imizi yapabiliriz.
git commit -m “Add introduction to HL2 Story”
git commit –m “Add introduction to HL2 Story” |
git status komutunun sonucuna baktığımızda nothing to commit, working tree clean ‘e geri döndük. Dizinin içerisine bakarsanız yine story.txt dosyasını görebilirsiniz.
git log‘un sonucuna baktığımızda bir tane commit yapıldığını gösteriyor. Biraz daha detaylandırırsak
commit 815029b1b00556b277a3b9b87c3b19e24dc755bd
Author: Omer Ozkan <[email protected]>
Date: Sun Sep 17 21:45:55 2017 +0300Add introduction to HL2 Story
815029 ile başlayan bir id görüyorsunuz. Bu bizim commit id‘miz. Bu id sizde farklı değerde olabilir. Author yani yazarın adı ve eposta adresinin kendime ait olduğunu görüyorum. Yani bu commit‘i benim yaptığım anlamına gelir. Yine tarih bilgisi aşağıda da az önce yazdığımız mesajı görüyorsunuz.
Commit Mesajı
Her commit‘in mutlaka bir mesajı olmak zorundadır. Girdiğimiz mesaj yaptığımız değişikliğin ne olduğuna dair kısa bir bilgi içermelidir. Bu temiz bir versiyonlama için oldukça önemlidir. Bu mesajı da commit yaparken -m parametresi ile tanımlamış olduk.
Bir Commit Daha!
Şimdi yeni bir commit yapalım. story.txt dosyasına bir paragraf daha ekleyelim dosyanın son hali şu şekilde olacaktır:
Nearly twenty years after the Black Mesa Incident the G-Man wakes Gordon Freeman and inserts him (seemingly, without any goals) into a train arriving in City 17, a city under control of the Combine Empire located somewhere in Eastern Europe.
After leaving the train, Gordon and other passengers are welcomed by a broadcast by Dr. Wallace Breen, former administrator of Black Mesa, who is now Earth’s administrator. Continuing on his way, Gordon meets armed Civil Protection officers policing the train station and its surroundings. One of them separates him from the rest of the arriving citizens and directs him into a small interrogation room before revealing himself to be former Black Mesa security guard Barney Calhoun, operating undercover for the Resistance.
Nearly twenty years after the Black Mesa Incident the G–Man wakes Gordon Freeman and inserts him (seemingly, without any goals) into a train arriving in City 17, a city under control of the Combine Empire located somewhere in Eastern Europe.
After leaving the train, Gordon and other passengers are welcomed by a broadcast by Dr. Wallace Breen, former administrator of Black Mesa, who is now Earth‘s administrator. Continuing on his way, Gordon meets armed Civil Protection officers policing the train station and its surroundings. One of them separates him from the rest of the arriving citizens and directs him into a small interrogation room before revealing himself to be former Black Mesa security guard Barney Calhoun, operating undercover for the Resistance. |
git status komutunun sonucunda Changes not staged for commit: listesinin altında modified ibaresini görüyorsunuz. story.txt dosyası daha önce commit edildiği için bir önceki gibi untracked statusunde değil. Artık git bu dosyada yapılan değişiklikleri takip ediyor.
İlk commit’imizdeki gibi git add komutunu verelim.
git add komutundan sonra story.txt dosyasının “Changes to be committed” listesinde olduğunu görüyoruz. Az öncekinden farklı olarak “new file” yerine “modified” ibaresini görüyoruz. Artık commit işlemini yapabiliriz.
2. Commit’imizi de yaptık. Bu işlemden sonra git status ve git log ile depomuzun son haline bakalım
commit 4d8155f86a9d7cc351ef223db3a5af2670224bdc
Author: Omer Ozkan <[email protected]>
Date: Sun Sep 17 22:33:02 2017 +0300Add ‘Gordon meets armed Combine officers’
commit 815029b1b00556b277a3b9b87c3b19e24dc755bd
Author: Omer Ozkan <[email protected]>
Date: Sun Sep 17 21:45:55 2017 +0300Add introduction to HL2 Story
Dersimizin sonuna geldik. Bu dersimizde kendi sistemimizde bir git deposu yaratıp, ilk commit’lerimizi yaptık.
Pratik Yapmak
Sizlere tavsiyemiz yukarıdaki dersleri mutlaka siz de kendi bilgisayarlarınızda yapınız. Hatta size bir ipucu vereyim. half-life-2 dizinini silerseniz git deposu da silinmiş olacaktır. Bu işlemden sonra dersimizdeki adımları tekrarlayabilirsiniz. Farklı farklı dosyalar ekleyerek kendiniz de deneyebilirsiniz.
Bu dersimizde Git Commit komutunu kullandık . Bir sonraki dersimizde yine temel kavramlardan branch‘i ve zamanı geri almayı öğreneceğiz.
Konu hakkında görüş ve sorularınızı yorum kısmından veya Soru & Cevap sitemizden sorabilirsiniz.
Bir sonraki derste görüşmek üzere…
Git derslerinin tamamı için tıklayınız.
9