Git — Versiyon Kontrol
Yazılım geliştirmeyi kendine meslek edinmek isteyen bir üniversite öğrencisiyim ve bu yolun gidişatına baktığımda backend geliştirme, frontend geliştirme, hangi programlama dili, hangi framework vs gibi ayrım ve seçimleri yapmadan herkesin bilmesi gereken temel konu ve kavramlar olduğunu gördüm. Bunları bilmeden bu yola çıkılabilir mi? Evet çıkılabilir. Ama mesleki sürece girdiğinizde eninde sonunda öğrenmek zorunda kalacağınıza eminim. Bu kavramlar matematik, algoritma ve veri yapıları, temel terminal kullanımı, git — versiyon kontrol, http protokolleri. SOLID prensipler vs gibi öncelikli başlıklarda toparlanabilir ve yine tercihe bağlı başka başlıklar daha eklenebilir. Daha detayına girmek veya yüzeysel kalmak tamamen size kalmış bir durum.
Ben bu yazımda git ve kullanımından kendi yorum ve notlarımla genel olarak bahsedeceğim. Eğer yazılım geliştirme dünyasına girmek, burada yer edinmek istiyorsanız git’in kesinlikle aşina olmanız gereken bir terim olduğunu ve daha sonra çok sık kullanacağınızı bilmelisiniz.
Değineceğim konuları alttaki başlıklarda topladım.
- Git Nedir?
- Git ile entegre platformlar
- Kurulum
- Temel git komutları ile olan projeyi klonlama ve git reposu oluşturma
Git Nedir?
Git bir versiyon kontrol sistemidir. Versiyon Kontrol Sisteminin (VCS) ne olduğunun cevabı için öncelikle bu ihtiyacın duyulduğu kısmı anlatmak istiyorum. Bir yazılım projesi geliştirdiğimizi düşünelim. Ne gibi sorunlar yaşayabiliriz? Projemizdeki gelişmeleri adım adım kaydetme ihtiyacı, bu değişikliklerin hangi dosyada neden yapıldığını görme ihtiyacı, istediğimizde geriye dönebilme ya da değişiklikleri geri alma ihtiyacı duyabilirdik değil mi? Ya da birden fazla insanla çalışıyorsak birbiriyle çakışan kodları yazabilme oranımız oldukça fazla olurdu. Bu gibi sorunlar bir yazılım projesini daha iyi yönetme ihtiyacını doğurdu ve versiyon kontrol sistemleri ile bu sorunlara çözüm bulabilmiş olduk. Bu noktada git kullanarak projemizi adım adım yönetebiliyoruz. Git bu alanda tek başına değil fakat oldukça popüler. Genel olarak özetlersek git,
- Uzak bir sunucuya projenizi koymayı ve başkalarının da bu projeyi kendi lokallerine alabilmesini,
- Zaman ve alandan tasarruf sağlamayı,
- Projede değişiklikler yapılmasını ve her değişikliğin tutulmasını,
- Bu değişiklikleri hatasız olarak birleştirebilme imkanını,
- Projeyi dallara ayırıp, başkalarıyla hatasız çalışabilme imkanını sağlıyor.
Git ile entegre platformlar
Bu platformlar Git kullanan yazılım projeleri için depolama servisleridir. Açık kaynaklı (Open Source) projeler için ücretsizlerdir. Dünyanın birçok yerindeki insanların yaptığı işleri görebilmek, onlarla aynı projelerde çalışabilmek, şirketlerin gizli projelerini daha rahat yönetebilmesi gibi imkanlar sunar. İşe alımlarda bu platformları ne kadar aktif kullandığınız, neler yaptığınız, açık kaynağa ne kadar katkıda bulunduğunuz oldukça önem taşıyor birçok işverene göre. Hepsinin yaptığı iş temelde aynı olsa da bir takım farklılıklarda mevcut. Aşinalık kazanmak adına genel hatlarıyla bahsetmek istiyorum çünkü ihtiyaca ve çalışılan ortama bağlı olarak farklılık gösterebilecek bir tercih.
Git hakkında duyduğum ilk şey GitHub’tı. Ve çok yapılan bir hata olarak git ve GitHub’ı aynı şey sandığım bir zaman oldu. Birbiriyle ilişkileri var fakat birbirinden ayrı şeyler olduğunu söyleyerek başlamakta fayda var.
GitHub, bu servisler arasında en popüler olanı. Bunun sebeplerinden biri de ilklerden olması.Yeni bir geliştirici iseniz GitHub hesabınızı hemen açmanızı tavsiye ederim. Ben örnekleri GitHub üzerinde oluşturacağım. Eğer yoksa aşağıdaki linkten yeni bir GitHub hesabı oluşturabilirsiniz.
https://github.com/join?source=login
GitLab, GitHub’ın tam olarak açık kaynak ve ücretsiz hali diyebiliriz. Sınırsız kod deposu, disk alanı ve kod devamlılığı gibi hizmetler burada ücretsiz olarak servis ediliyor. Yine ücretli sürümleri mevcut ve bunlarla beraber ek özellikler gelebiliyor.
BitBucket, ücretsiz hesaplara en fazla beş kullanıcıya kadar limitsiz özel depo alanı sunmaktadır. Aynı zamanda bir Atlassian ürünü olduğundan Jira entegrasyonu da vardır.
Azure DevOps, agile planlama, süreç planlama, sürekli entegrasyon gibi özellikleriyle ön plana çıkmaktadır.
Kurulum
Bu linke tıklayarak kendi bilgisayarınıza uygun olan kurulum dosyasını indirin ve başlatın. Ben Windows işletim sistemine sahip bir makine kullanıyorum ve işlemlerime Command Prompt üzerinden devam edeceğim, isterseniz Git Bash’te kullanabilirsiniz.
Yüklediğinizden emin olmak adına terminali açtıktan sonra “git — version” komutunu çalıştırın.
Temel git komutları ile olan projeyi klonlama ve git reposu oluşturma
Şuan git, terminali hiç kullanmadan gelişmiş IDE (Integrated Development Environment — Geliştirme Ortamı)’ler tarafından kolaylıkla kullanılabiliyor. Tabi bunun içinde temel komutları ve kullanımlarını bilmeyiz. Ben örnek bir proje üzerinden temel komutları size anlatarak ilerleyeceğim ve bunu terminal üzerinden göstereceğim.
Working Directory : Bizim bilgisayarımızda çalıştığımız, değişikler yaptığımız kısımdır. Bu değişiklikler sadece bizim bilgisayarımızda geçerlidir.
Staging Area : Burada çalıştığımız dosyalardaki değişikleri kaydedip, eklemiş oluyoruz ve commit etmek üzere hazır hale gelmiş oluyor. Bir ara katman olarak değerlendirebiliriz.
Repository : Bu kısımda artık bütün değişiklikler kendi bilgisayarımızda kaydedilmiş oluyor. İstediğimiz zaman eski versiyonlara dönebilmeyi mümkün kılmış oluyoruz.
Remote Repository : Uzak bir depo kullanmanın avantajı yaptıklarınızı paylaşmak ve başka insanlarla çalışabilmek adına gerekli.
Öncelikle GitHub’ta yeni bir depo alanı oluşturmalıyız. Ben helloworld adında oluşturdum. Repositories -> New (https://github.com/new) -> Create Repository dediğinizde oluşmuş olacak. İkinci olarak masaüstüne boş bir “git” adlı klasörü oluşturdum ama şart değil istediğiniz yerde yapabilirsiniz.
Artık elimizde hazır bir projemiz var ve bu projeyi nasıl kendi bilgisayarımıza alacağımıza ve değişiklikler yapabileceğimize bakacağız.
- git clone : Olan bir projeyi url yoluyla bilgisayarımıza almamızı sağlıyor.
git clone <uzak_sunucu_url>
Daha sonra klasörün içine gittiğimde README.md dosyasını görebiliyorum. İçine bir “index.html” dosyası ekledim.
- git status : Kaydedilmemiş değişiklikleri kırmızı, kaydedilmiş değişiklikleri yeşil renkte görmemizi sağlıyor. Yeşil olanlar commit edilmeye hazır oluyorlar.
git status
- git add : Kaydedilmemiş dosyaları bu komutla ekliyoruz.
git add <dosya_ismi> ya da
git add . (bütün dosyaları ekler)
Daha sonra tekrar “git status” yaptığımızda kaydedildiğini gördük. Şimdi commit etmek için hazır durumda.
- git commit : Her commit ettiğimiz yere daha sonra geri dönebiliriz. Depomuza taşımış oluyoruz.
git commit -m “mesaj”
Şuan da baktığınızda GitHub hesabınızda bir değişiklik olmadığını göreceksiniz. Artık uzak depoya değişiklikleri göndermemiz gerekiyor.
- git push : Kaydedilen değişiklikleri lokalden uzak depoya gönderiyor.
git push
Değişiklikleri artık GitHub’ta görebiliriz.
Şimdi git kullanmadan GitHub üzerinden “metin.txt” isimli başka bir dosya ekleyeceğim.
- git pull : Bilgisayarımızdaki dosyada güncellenen projeyi almak için gerekli komut.
git pull
- git log : Yapılmış bütün commitleri detaylı bir şekilde görmemizi sağlar.
git log
Olan bir projeyi kendi lokalimize nasıl klonladığımızı gördük. Şimdi lokalimizde olan bir projeyi uzak depoyla bağlayalım. GitHub hesabımda “text” isimli ikinci bir repository oluşturuyorum. “git” klasörüne aynı isimli ikinci bir klasör ve içine “metin.txt” isimli ikinci bir dosya ekliyorum.
- git init : Kendi lokalimizde yeni bir depo oluşturmak için istediğimiz dosya yoluna gidip bu komutu çalıştırıyoruz.
git init
- git remote add : Uzak depodaki url ile eşlemek için bu komutu kullanıcaz. Daha sonra “git remote” ile kontrol edebilirsiniz.
git remote add <origin> <uzak_depo_url>
Daha sonra gördüğümüz komutları aynı sırayla çalıştırıyoruz. En son gönderirken “git push -u origin master” diyoruz.
Keyifli ve faydalı bir okuma olması dileğiyle…
Ücretsiz İngilizce Başlangıç Seviye Git