İLE %100 UYUMLU: Güvenli E-Posta Hosting Hizmetimizi 1 AY ÜCRETSİZ Deneyin! HEMEN OLUŞTURUN
Bir yazılım projesi üzerinde çalışırken yapılan değişiklikleri takip etmek, eski bir sürüme geri dönmek veya birden fazla geliştiricinin aynı kod üzerinde güvenli biçimde çalışmasını sağlamak zamanla zorlaşabilir. Dosyaları farklı isimlerle kaydetmek ya da her önemli değişiklikten önce projenin bir kopyasını oluşturmak başlangıçta işe yarasa da proje büyüdükçe yönetilmesi güç bir alışkanlığa dönüşür. Git, tam da bu noktada devreye girer.
Git, dosyalardaki değişiklikleri kaydetmeye, geçmiş sürümleri incelemeye ve farklı geliştirme çalışmalarını bir arada yönetmeye yarayan dağıtık bir sürüm kontrol sistemidir. Özellikle yazılım geliştirmede yaygın olarak kullanılır. Bununla birlikte Git, yalnızca programlama kodları için tasarlanmamıştır. Metin belgeleri, yapılandırma dosyaları ve sürümleri takip edilmesi gereken başka metin tabanlı projeler de Git ile yönetilebilir.
Bu rehberde Git’in ne olduğunu, GitHub ile arasındaki farkları, bilgisayara nasıl kurulacağını ve en önemli Git komutlarının nasıl kullanılacağını öğreneceksiniz. Ayrıca branch yönetimi, uzak depolarla çalışma, birleştirme çakışmaları ve sık yapılan hatalar gibi günlük geliştirme sürecinde karşılaşabileceğiniz konulara da değineceğiz.
İçindekiler
Git, bir projenin zaman içinde nasıl değiştiğini kaydeden ve bu değişikliklerin geçmişine erişmenizi sağlayan bir sürüm kontrol sistemidir. Projeye yeni bir özellik eklediğinizde, bir hatayı düzelttiğinizde veya bir dosyanın içeriğini değiştirdiğinizde bu işlemleri Git üzerinden takip edebilirsiniz.
Örneğin, çalışan bir web sitesine yeni bir ödeme yöntemi eklediğinizi düşünün. Güncelleme sonrasında başka bir bölüm çalışmamaya başlarsa hangi dosyaların değiştiğini inceleyebilir, önceki sürümlerle karşılaştırma yapabilir ve hatanın kaynağını araştırabilirsiniz. Uygun koşullarda önceki bir sürüme dönmek de mümkündür.
Git’in temel faydaları şunlardır:
Git kullanmak için büyük bir yazılım ekibinde çalışmanız gerekmez. Tek başınıza geliştirdiğiniz küçük bir uygulamada bile sürüm kontrolü, yanlışlıkla yapılan değişikliklere karşı daha düzenli bir çalışma yöntemi sunar.
Git ve GitHub sıklıkla birlikte anıldığı için aynı şey oldukları düşünülebilir. Ancak görevleri farklıdır.
Git, bilgisayarınızda çalışan ve dosyaların sürümlerini yöneten araçtır. GitHub ise Git depolarını çevrim içi ortamda barındırmaya ve bu depolar üzerinde ekip çalışması yürütmeye yarayan bir platformdur. Git ile çalışmak için GitHub hesabına sahip olmak zorunda değilsiniz.
Örneğin, internet bağlantınız olmasa bile bilgisayarınızda bir Git deposu oluşturabilir, dosyaları değiştirebilir ve commit kayıtları alabilirsiniz. GitHub gibi bir platforma bağlandığınızda ise yerel deponuzdaki değişiklikleri uzak depoya gönderebilir, diğer geliştiricilerin değişikliklerini alabilir ve kod inceleme süreçlerine katılabilirsiniz.
GitHub’ın yanı sıra Git depolarını barındıran başka platformlar da vardır. Hangi platformu seçerseniz seçin, temel Git komutlarının önemli bir bölümü aynı şekilde çalışır.
Git’i kullanmaya başlamadan önce bilgisayarınızda kurulu olup olmadığını kontrol edin. Terminal veya komut satırını açarak aşağıdaki komutu çalıştırın:
git --version
Kurulu bir Git sürümü varsa terminalde sürüm bilgisi görüntülenir. Komut bulunamadı şeklinde bir hata alıyorsanız Git’i yüklemeniz gerekir.
Windows kullanıcıları Git’in resmî indirme sayfasındaki kurulum paketini kullanabilir. macOS üzerinde Git, Xcode Command Line Tools aracılığıyla kurulabilir veya sisteminize uygun başka bir kurulum yöntemi tercih edilebilir. Linux dağıtımlarında ise genellikle dağıtımın paket yöneticisi kullanılır.
Kurulum dosyalarını ve işletim sisteminize özel talimatları Git’in resmî web sitesinden inceleyebilirsiniz.
Kurulum tamamlandıktan sonra terminali yeniden açın ve sürüm kontrolünü tekrarlayın. Ardından Git’e commit kayıtlarında kullanılacak kullanıcı adını ve e-posta adresini tanımlayın:
git config --global user.name "Kullanıcı Adı" git config --global user.email "[email protected]"
Buradaki bilgiler, oluşturacağınız commit kayıtlarının yazar bilgilerini belirler. --global seçeneği ayarların mevcut kullanıcı hesabı için genel olarak uygulanmasını sağlar. İsterseniz belirli bir projede farklı bilgiler kullanmak için depo içinde yerel ayarlar da tanımlayabilirsiniz.
--global
Ayarları kontrol etmek için:
git config --list
E-posta adresinizin herkese açık depolarda görünmesini istemiyorsanız commit kimliğiniz için uygun bir gizlilik ayarı seçmeniz önemlidir. Git yapılandırmasındaki e-posta adresi, GitHub hesabınızın kullanıcı adıyla aynı olmak zorunda değildir.
Git’i öğrenmenin en kolay yolu küçük bir proje üzerinden ilerlemektir. Örneğin, içinde bir index.html dosyası bulunan basit bir web projesi hazırlayabilirsiniz.
index.html
Öncelikle proje klasörünü oluşturun ve terminalde bu klasöre geçin. Ardından şu komutu çalıştırın:
git init
Bu komut, bulunduğunuz klasörde yeni bir Git deposu başlatır. Git, sürüm kontrolü için gerekli bilgileri .git adlı gizli bir dizinde tutar.
.git
Önemli: git init mevcut dosyalarınızı otomatik olarak commit etmez. Yalnızca klasörü bir Git deposu hâline getirir. Dosyalarınızı sürüm geçmişine eklemek için ayrıca hazırlama ve commit işlemlerini gerçekleştirmeniz gerekir.
Projenin durumunu görmek için:
git status
Bu komut, Git’in hangi dosyaları takip ettiğini, hangi dosyaların değiştiğini ve hangi değişikliklerin bir sonraki commit için hazırlandığını gösterir.
Git’in temel çalışma mantığında iki önemli adım bulunur: Değişiklikleri hazırlamak ve hazırlanan değişiklikleri geçmişe kaydetmek.
Örneğin, index.html dosyasını oluşturduğunuzda Git bu dosyayı henüz takip etmiyor olabilir. Dosyayı hazırlama alanına eklemek için:
git add index.html
Projedeki uygun tüm değişiklikleri hazırlamak için git add . komutu da kullanılabilir. Ancak bu komutu çalıştırmadan önce hangi dosyaların ekleneceğini kontrol etmek iyi bir alışkanlıktır.
git add .
Hazırlanan değişiklikleri kaydetmek için:
git commit -m "İlk proje sürümünü oluştur"
Bu işlem yeni bir commit oluşturur. Commit, hazırlama alanındaki değişikliklerin proje geçmişine kaydedilmiş bir sürümüdür.
Burada önemli bir ayrıntı vardır: git add dosyayı hazırlama alanına ekler, git commit ise hazırlanan içeriği yerel geçmişe kaydeder. Dosyayı değiştirdikten sonra yeniden git add çalıştırmazsanız son değişiklikler bir sonraki commit’e dahil edilmeyebilir.
git add
git commit
Git’in çok sayıda komutu vardır ancak başlangıçta bunların tamamını öğrenmeniz gerekmez. Günlük geliştirme sürecinde aşağıdaki komutlar çoğu temel işlemi gerçekleştirmenize yardımcı olur.
git add dosya
git commit -m "mesaj"
git log
git diff
git diff --staged
git branch
git switch branch-adi
git merge branch-adi
git clone depo-adresi
git pull
git push
Bu komutların ne yaptığını bilmek kadar hangi sırayla kullanılacağını anlamak da önemlidir. Örneğin, bir dosyada değişiklik yaptıktan sonra git status ile kontrol etmek, git diff ile farkları incelemek, ardından git add ve git commit komutlarını çalıştırmak daha kontrollü bir iş akışı sağlar.
Branch, bir projenin geliştirme geçmişi içinde ayrı bir çalışma çizgisidir. Ana projeyi doğrudan değiştirmek yerine yeni bir branch oluşturarak farklı bir özellik üzerinde çalışabilirsiniz.
Örneğin, mevcut web sitenize bir arama bölümü eklemek istiyorsunuz. Bu özelliği doğrudan ana branch üzerinde geliştirmek yerine arama-ozelligi adında ayrı bir branch oluşturabilirsiniz:
arama-ozelligi
git switch -c arama-ozelligi
Bu komut yeni branch oluşturur ve sizi otomatik olarak o branch’e geçirir. Artık yaptığınız değişiklikleri bu çalışma çizgisi üzerinde commit edebilirsiniz.
Mevcut branch’leri listelemek için:
Başka bir branch’e geçmek için:
git switch main
Buradaki main, ana branch’in yaygın adıdır. Projenizde ana branch farklı isimlendirilmiş olabilir.
main
Yeni özellik tamamlandığında değişiklikleri ana branch’e birleştirebilirsiniz. Önce ana branch’e geçin:
Ardından yeni branch’teki değişiklikleri birleştirin:
git merge arama-ozelligi
Birleştirme işlemi sorunsuz tamamlanırsa yeni özellik ana geliştirme çizgisine dahil edilir. Birleştirme sonrasında eski branch’i silmek isterseniz şu komutu kullanabilirsiniz:
git branch -d arama-ozelligi
Branch kullanımı, özellikle aynı projede birden fazla özellik veya hata düzeltmesi üzerinde çalışırken düzen sağlar. Ekip çalışmalarında değişikliklerin incelenmesi ve onaylanması için de uygun bir temel oluşturur.
Yerel Git deponuz hazır olduğunda projeyi bir uzak depoyla eşleştirebilirsiniz. GitHub üzerinde boş bir depo oluşturduğunuzu varsayalım. Platformun sunduğu depo adresini yerel projenize eklemek için şu komutu kullanabilirsiniz:
git remote add origin DEPO_ADRESI
DEPO_ADRESI yerine GitHub’ın verdiği gerçek depo adresini yazmanız gerekir. origin, uzak depo için yaygın olarak kullanılan bir isimdir; zorunlu bir isim değildir.
DEPO_ADRESI
origin
Yerel branch’inizin adını main yapmak istiyorsanız ve bu ad henüz kullanılmıyorsa şu komutu çalıştırabilirsiniz:
git branch -M main
Ardından commit kayıtlarınızı uzak depoya gönderebilirsiniz:
git push -u origin main
Bu işlem yerel main branch’indeki commit’leri origin adlı uzak depodaki main branch’ine gönderir. -u seçeneği, sonraki işlemlerde kullanılacak takip ilişkisini kurar.
-u
Bir ekip arkadaşınız uzak depoya yeni değişiklikler gönderdiyse bunları almak için genellikle şu komut kullanılır:
Bu komut, yapılandırılmış uzak kaynaktaki değişiklikleri alır ve mevcut branch ile entegre eder. Çakışma oluşması veya uzak geçmişin yerel geçmişle uyumlu olmaması gibi durumlarda ek işlem gerekebilir.
GitHub üzerinden başka geliştiricilerin katkılarını incelemek ve birleştirmeden önce değerlendirmek için pull request mekanizması da kullanılabilir. Bu yöntem, özellikle doğrudan ana branch’e gönderim yapılmayan ekiplerde kod inceleme sürecini kolaylaştırır.
İki farklı branch’te aynı dosyanın aynı bölümü değiştirilmişse Git hangi değişikliğin korunması gerektiğine her zaman otomatik olarak karar veremez. Bu durumda merge conflict, yani birleştirme çakışması oluşabilir.
Git, çakışan bölümü dosyada aşağıdakine benzer işaretlerle gösterebilir:
<<<<<<< HEAD Başlık: Yeni Ürünler ======= Başlık: Öne Çıkan Ürünler >>>>>>> arama-ozelligi
Bu işaretler, mevcut branch’teki içerikle birleştirilen branch’teki içeriği birbirinden ayırır. Çözüm için dosyayı açıp hangi içeriğin korunacağına karar vermeli, gerekiyorsa iki değişikliği birleştirerek doğru sonucu oluşturmalısınız.
Düzenleme tamamlandıktan sonra çakışma işaretlerini kaldırın ve dosyanın son hâlini kontrol edin. Ardından:
git add index.html git commit -m "Birleştirme çakışmasını çöz"
Bu örnekte index.html dosyasının çakışma içeren dosya olduğunu varsayıyoruz. Gerçek projede komutlarda kendi dosya adınızı kullanmalısınız. Bazı birleştirme işlemlerinde Git otomatik olarak birleştirme commit’i oluşturabilir veya farklı bir tamamlama adımı gerekebilir. Bu nedenle işlemden önce git status çıktısını kontrol etmek önemlidir.
Çakışma oluşması, projenin bozulduğu anlamına gelmez. Git yalnızca hangi değişikliğin seçilmesi gerektiği konusunda karar veremediğini bildirir. Dosyanın son hâlini dikkatle düzenlemek sorunu çoğu zaman çözer.
Git’in en kullanışlı yönlerinden biri, değişiklikleri inceleme ve belirli işlemleri geri alma olanağı sunmasıdır. Ancak her geri alma komutu aynı sonucu doğurmaz. Bazıları yalnızca dosyalardaki düzenlemeleri etkilerken bazıları commit geçmişini değiştirir.
Henüz hazırlama alanına eklenmemiş değişiklikleri görmek için:
Hazırlanmış değişiklikleri kontrol etmek için:
Bir commit’in hangi dosyaları değiştirdiğini ve commit geçmişini incelemek için:
git log --oneline
Önceki bir commit’in yaptığı değişiklikleri geri almak istediğinizde git revert kullanılabilir. Bu komut, önceki değişiklikleri tersine çeviren yeni bir commit oluşturur:
git revert
git revert COMMIT_KIMLIGI
COMMIT_KIMLIGI yerine geri almak istediğiniz commit’in kimliğini yazmalısınız. Özellikle başkalarıyla paylaşılan branch’lerde, geçmişi yeniden yazmak yerine git revert kullanmak daha güvenli bir seçenek olabilir.
COMMIT_KIMLIGI
Öte yandan git reset ve git restore gibi komutlar farklı amaçlara hizmet eder. Yanlış seçeneklerle kullanıldıklarında commit’leri veya yerel değişiklikleri erişilmesi zor hâle getirebilir ya da kaybettirebilirler. Bu nedenle neyi geri almak istediğinizden emin olmadan gelişigüzel geri alma komutları çalıştırmayın. Önemli dosyalarda işlem yapmadan önce yedek almak da faydalıdır.
git reset
git restore
Her proje dosyasının sürüm kontrolüne eklenmesi gerekmez. Önbellek dosyaları, geçici çıktılar, yerel ortam ayarları ve bağımlılık dizinleri gibi içerikler projeye göre Git dışında tutulabilir.
Bunun için proje kök dizininde .gitignore adlı bir dosya oluşturulur. Örneğin:
.gitignore
.env .env.local node_modules/ vendor/ .DS_Store
Bu örnek, ilgili desenlerle eşleşen dosya ve dizinlerin Git tarafından izlenmeyen değişiklikler olarak değerlendirilmesini önlemeye yardımcı olur. Ancak .gitignore, daha önce Git tarafından takip edilmeye başlanmış bir dosyayı otomatik olarak takip dışına çıkarmaz.
Özellikle .env gibi dosyalar veritabanı parolaları, API anahtarları veya başka gizli bilgiler içerebilir. Bu bilgileri herkese açık bir depoya göndermemek önemlidir. Gizli bilgiler yanlışlıkla commit edilmişse yalnızca dosyayı sonraki sürümden silmek yeterli olmayabilir; önce sızan anahtarları veya parolaları geçersiz kılmalı, ardından gerekirse depo geçmişi için ek temizlik işlemleri uygulamalısınız.
.env
Git’i öğrenirken karşılaşılan sorunların önemli bir bölümü, komutların ne yaptığını bilmeden uygulanmasından kaynaklanır. Aşağıdaki alışkanlıklar daha kontrollü çalışmanıza yardımcı olabilir:
değişiklik yapıldı
reset
restore
revert
Bir diğer önemli nokta da Git’in tek başına yedekleme sistemi olmadığıdır. Yerel diskiniz bozulursa ve değişikliklerinizi başka bir depoya veya yedekleme sistemine aktarmadıysanız verilerinizi kaybedebilirsiniz. Uzak depolar ve düzenli yedekler, farklı risklere karşı koruma sağlar.
Git, yazılım geliştirme sürecini daha izlenebilir ve yönetilebilir hâle getiren temel araçlardan biridir. Değişiklikleri kaydetmek, önceki sürümleri incelemek, farklı özellikleri ayrı branch’lerde geliştirmek ve ekip arkadaşlarıyla çalışmak için kapsamlı olanaklar sunar.
Başlangıçta bütün komutları ezberlemek yerine küçük bir proje oluşturup git init, git status, git add ve git commit komutlarıyla çalışmaya başlayabilirsiniz. Ardından git log ve git diff ile geçmişi incelemeyi, branch oluşturmayı ve GitHub gibi bir platformla uzak depo yönetimini öğrenebilirsiniz.
Git’i etkili kullanmanın temelinde komut sayısından çok, yapılan değişiklikleri bilinçli biçimde yönetmek vardır. Düzenli commit’ler, açıklayıcı mesajlar, doğru branch kullanımı ve dikkatli geri alma işlemleri sayesinde hem bireysel projelerde hem de ekip çalışmalarında daha güvenilir bir geliştirme süreci oluşturabilirsiniz.