Git Nedir ve Neden Önemlidir?
Git, 2005 yılında Linux çekirdeğinin yaratıcısı Linus Torvalds tarafından geliştirilen dağıtık bir versiyon kontrol sistemidir. Yazılım geliştirme sürecinde kodunuzun her değişikliğini takip eder, geçmişe dönmenizi sağlar ve ekip arkadaşlarınızla aynı proje üzerinde sorunsuz çalışmanıza olanak tanır.
Versiyon kontrolü olmadan yazılım geliştirmek, bir kitabı yazmak ve hiçbir taslağı saklamadan ilerlemek gibidir. Hata yaptığınızda geri dönecek bir noktanız olmaz, farklı fikirleri denemek riskli hale gelir ve birden fazla kişiyle çalışmak neredeyse imkansızlaşır. Git, tüm bu sorunlara zarif çözümler sunar.
Git Kurulumu ve İlk Yapılandırma
Git Kurulumu
Git'i kullanmaya başlamak için öncelikle bilgisayarınıza kurmanız gerekir. İşletim sisteminize göre kurulum adımları şu şekildedir:
- Windows: git-scm.com adresinden indirici dosyasını indirip çalıştırın. Varsayılan ayarlarla kurulum yapabilirsiniz.
- macOS: Terminal'de
brew install gitkomutunu çalıştırın veya Xcode Command Line Tools ile otomatik olarak yükleyin. - Linux: Dağıtımınıza göre
sudo apt install git(Debian/Ubuntu) veyasudo dnf install git(Fedora) komutunu kullanın.
İlk Yapılandırma
Git kurulumundan sonra kimliğinizi tanımlamanız gerekir. Bu bilgiler her commit'inizde kaydedilir ve değişikliklerin kime ait olduğunu gösterir:
git config --global user.name "Adınız Soyadınız"
git config --global user.email "[email protected]"
Bu yapılandırma yalnızca bir kez yapılır ve tüm projelerinizde geçerli olur. Belirli bir proje için farklı bilgiler kullanmak isterseniz --global parametresini kaldırmanız yeterlidir.
Temel Git Komutları
Yeni Bir Depo Oluşturma
Git ile çalışmaya başlamak için bir depo (repository) oluşturmanız gerekir. Mevcut bir klasörü Git deposuna dönüştürmek için o klasörde şu komutu çalıştırın:
git init
Bu komut, klasörünüzde gizli bir .git dizini oluşturur. Tüm versiyon geçmişi bu dizinde saklanır.
Değişiklikleri Takip Etme
Git'in temel iş akışı üç aşamadan oluşur: çalışma dizini, hazırlama alanı (staging area) ve depo. Bu aşamalar arasında geçiş yapmak için şu komutları kullanırsınız:
git status— Değişikliklerin durumunu görüntülergit add dosya.txt— Belirli bir dosyayı hazırlama alanına eklergit add .— Tüm değişiklikleri hazırlama alanına eklergit commit -m "Açıklayıcı mesaj"— Hazırlanan değişiklikleri kaydeder
Geçmişi İnceleme
Projenizin geçmişini incelemek için git log komutunu kullanabilirsiniz. Bu komut, tüm commit'leri tarih sırasına göre listeler. Daha kompakt bir görünüm için git log --oneline tercih edilebilir.
git log --oneline --graph --all
Bu komut, tüm dalları grafik olarak gösterir ve projenizin gelişim sürecini görsel olarak takip etmenizi sağlar.
Branch (Dal) Yönetimi
Branch'ler Git'in en güçlü özelliklerinden biridir. Ana kodunuzu bozmadan yeni özellikler geliştirmenize, hataları düzeltmenize veya deneysel değişiklikler yapmanıza olanak tanır.
Branch Oluşturma ve Geçiş Yapma
Yeni bir branch oluşturmak ve o branch'e geçmek için şu komutları kullanabilirsiniz:
git branch yeni-ozellik
git checkout yeni-ozellik
Bu iki komutu tek satırda birleştirebilirsiniz:
git checkout -b yeni-ozellik
Modern Git sürümlerinde git switch komutu da kullanılabilir:
git switch -c yeni-ozellik
Branch Birleştirme (Merge)
Bir branch üzerindeki çalışmanız tamamlandığında, değişiklikleri ana branch'e birleştirmeniz gerekir:
git checkout main
git merge yeni-ozellik
Birleştirme işlemi sırasında çakışmalar (conflicts) oluşabilir. Git, çakışan dosyaları işaretler ve sizden manuel olarak düzeltmenizi ister. Çakışmaları çözdükten sonra değişiklikleri commit'lemeniz yeterlidir.
Branch Stratejileri
Profesyonel projelerde yaygın olarak kullanılan branch stratejileri şunlardır:
- Git Flow: main, develop, feature, release ve hotfix branch'lerini kullanan kapsamlı bir strateji
- GitHub Flow: Daha basit bir yaklaşım; main branch'ten feature branch'ler oluşturulur ve pull request ile birleştirilir
- Trunk-Based Development: Tüm geliştiriciler doğrudan ana branch üzerinde küçük ve sık commit'ler yapar
GitHub ile Uzak Depo Yönetimi
GitHub, Git depolarınızı bulutta barındırmanıza ve ekip arkadaşlarınızla paylaşmanıza olanak tanıyan bir platformdur. Açık kaynak projelerin merkezi haline gelmiş olan GitHub, milyonlarca geliştirici tarafından aktif olarak kullanılmaktadır.
GitHub Hesabı ve Depo Oluşturma
GitHub'da bir hesap oluşturduktan sonra yeni bir depo (repository) oluşturabilirsiniz. Depo oluştururken şu seçeneklere dikkat edin:
- Public veya Private: Projenizin herkese açık mı yoksa yalnızca davet edilenlere mi görünür olacağını belirler
- README dosyası: Projenizi tanımlayan bir başlangıç dosyası ekler
- .gitignore: Takip edilmemesi gereken dosyaları belirler
- Lisans: Projenizin kullanım şartlarını tanımlar
Yerel Depoyu GitHub'a Bağlama
Yerel Git deponuzu GitHub'daki uzak depoya bağlamak için şu komutları kullanırsınız:
git remote add origin https://github.com/kullanici/proje.git
git push -u origin main
İlk push işleminden sonra git push komutu tek başına yeterli olacaktır. Uzak depodaki değişiklikleri yerel deponuza çekmek için ise git pull komutunu kullanırsınız.
Pull Request ve Kod İnceleme
Pull request (PR), GitHub'ın en önemli özelliklerinden biridir. Bir branch üzerindeki değişikliklerinizi ana branch'e birleştirmeden önce ekip arkadaşlarınızın incelemesine sunmanızı sağlar.
Pull Request Oluşturma
- Feature branch'inizdeki değişiklikleri GitHub'a push edin
- GitHub'da "New Pull Request" butonuna tıklayın
- Kaynak ve hedef branch'leri seçin
- Değişikliklerinizi açıklayan bir başlık ve açıklama yazın
- İnceleme yapacak kişileri (reviewers) atayın
Kod İnceleme Süreci
İyi bir kod inceleme süreci, yazılım kalitesini artırır ve ekip içi bilgi paylaşımını güçlendirir. İnceleme yaparken şu noktalara dikkat edilmelidir:
- Kodun okunabilirliği ve anlaşılırlığı
- Potansiyel hatalar ve güvenlik açıkları
- Test kapsamı ve test kalitesi
- Proje standartlarına uygunluk
- Performans etkileri
Ekip Çalışması İçin En İyi Uygulamalar
Commit Mesajları
İyi yazılmış commit mesajları, projenin geçmişini anlamayı kolaylaştırır. Etkili commit mesajları için şu kurallara uyun:
- Kısa ve öz bir başlık yazın (50 karakter veya daha az)
- Gerekirse detaylı açıklamayı gövde kısmına ekleyin
- Emir kipi kullanın: "Hata düzeltildi" yerine "Hatayı düzelt"
- Değişikliğin nedenini açıklayın, ne yapıldığını değil
Çakışma Yönetimi
Ekip çalışmasında çakışmalar kaçınılmazdır. Çakışmaları en aza indirmek ve etkili bir şekilde yönetmek için şu stratejileri uygulayın:
- Sık sık ana branch'ten güncellemeleri çekin
- Küçük ve odaklanmış commit'ler yapın
- Aynı dosya üzerinde aynı anda çalışmaktan kaçının
- Çakışmaları çözerken her iki tarafın değişikliklerini dikkatlice inceleyin
.gitignore Dosyası
Her projede takip edilmemesi gereken dosyalar vardır. Derleme çıktıları, bağımlılık klasörleri ve ortam değişkenleri gibi dosyaları .gitignore dosyasında belirterek Git'in bunları yok saymasını sağlayabilirsiniz:
node_modules/
*.log
.env
bin/
obj/
.vs/
İleri Düzey Git Özellikleri
Stash Kullanımı
Üzerinde çalıştığınız değişiklikleri commit etmeden geçici olarak kaydetmek istediğinizde git stash komutunu kullanabilirsiniz. Bu özellik, acil bir düzeltme yapmanız gerektiğinde veya branch değiştirmeniz gerektiğinde son derece kullanışlıdır:
git stash
git stash pop
Rebase ve Squash
Rebase, bir branch'in geçmişini yeniden düzenlemek için kullanılır. Commit geçmişini temiz ve doğrusal tutmak istediğinizde merge yerine rebase tercih edebilirsiniz:
git rebase main
Squash ise birden fazla commit'i tek bir commit olarak birleştirmenizi sağlar. Bu, özellikle feature branch'lerindeki çok sayıda küçük commit'i tek bir anlamlı commit haline getirmek için kullanışlıdır.
Git Hooks
Git hooks, belirli Git olayları gerçekleştiğinde otomatik olarak çalışan betiklerdir. Commit öncesi kod formatlama, test çalıştırma veya commit mesajı doğrulama gibi işlemler için kullanılabilir. Popüler araçlardan Husky, JavaScript projelerinde Git hooks yönetimini kolaylaştırır.
GitHub Actions ile Otomasyon
GitHub Actions, CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) süreçlerini otomatikleştirmek için güçlü bir araçtır. Her push veya pull request işleminde otomatik testler çalıştırabilir, kod kalitesi kontrolleri yapabilir ve uygulamanızı dağıtabilirsiniz.
GitHub Actions iş akışları YAML dosyalarıyla tanımlanır ve .github/workflows dizininde saklanır. Hazır action'lar marketplace'ten edinilebilir veya kendi özel action'larınızı yazabilirsiniz.
Git ve GitHub, modern yazılım geliştirmenin vazgeçilmez araçlarıdır. Bu araçları etkin bir şekilde kullanmak, bireysel üretkenliğinizi artırır ve ekip çalışmasını güçlendirir. Küçük adımlarla başlayın, temel komutları öğrenin ve zamanla ileri düzey özellikleri keşfedin.