Git Nedir ve Neden Kullanılır?
Git, Linus Torvalds tarafından 2005 yılında Linux çekirdeğinin geliştirilmesi için oluşturulmuş dağıtık bir versiyon kontrol sistemidir. Kod değişikliklerini takip etmek, farklı sürümler arasında geçiş yapmak ve ekip halinde yazılım geliştirmek için kullanılır. Bugün dünya genelinde yazılım geliştiricilerin büyük çoğunluğu Git'i günlük iş akışlarının ayrılmaz bir parçası olarak kullanmaktadır.
Versiyon kontrol sistemi olmadan yazılım geliştirmek, bir geri dönüş noktası olmadan yolculuğa çıkmak gibidir. Git, her değişikliği kayıt altına alarak herhangi bir zamana geri dönmenizi, farklı özellikleri paralel olarak geliştirmenizi ve ekip arkadaşlarınızla çakışma olmadan çalışmanızı sağlar. Bir hata yapıldığında dakikalar içinde önceki çalışan versiyona geri dönülebilir.
Git'in Temel Kavramları
Repository (Depo)
Repository, projenizin tüm dosyalarını ve değişiklik geçmişini barındıran yapıdır. Yerel makinenizde oluşturduğunuz repository yerel depo, GitHub gibi platformlardaki repository ise uzak depo olarak adlandırılır. git init komutu ile yeni bir repository oluşturulur veya git clone ile mevcut bir uzak depo yerel makinenize kopyalanır.
Commit
Commit, kodunuzdaki değişikliklerin anlık görüntüsüdür. Her commit, bir mesaj, tarih, yazar bilgisi ve benzersiz bir hash değeri içerir. İyi yazılmış commit mesajları, projenin geçmişini anlaşılır kılar. Commit mesajları kısa, açıklayıcı ve tutarlı olmalıdır. Konvansiyonel commit mesajları kullanmak, proje geçmişini daha okunabilir hale getirir.
Branch (Dal)
Branch, ana kod tabanından bağımsız olarak çalışma yapmanızı sağlayan paralel geliştirme hattıdır. Yeni bir özellik geliştirirken veya bir hata düzeltirken branch oluşturarak ana kodu etkilemeden çalışabilirsiniz. İş tamamlandığında branch, ana dala merge edilir. Bu yaklaşım, ekip çalışmasında çakışmaları en aza indirir.
Temel Git Komutları
- git init: Yeni bir Git deposu oluşturur.
- git clone: Uzak bir depoyu yerel makinenize kopyalar.
- git add: Değişiklikleri staging alanına ekler.
- git commit: Staging alanındaki değişiklikleri kalıcı olarak kaydeder.
- git push: Yerel değişiklikleri uzak depoya gönderir.
- git pull: Uzak depodaki değişiklikleri yerel makinenize alır.
- git branch: Branch oluşturur, listeler veya siler.
- git merge: Bir branch'i başka bir branch ile birleştirir.
- git stash: Henüz commit edilmemiş değişiklikleri geçici olarak saklar.
- git log: Commit geçmişini görüntüler.
GitHub Nedir?
GitHub, Git tabanlı projeleri barındıran ve iş birliği araçları sunan dünyanın en büyük kod barındırma platformudur. 100 milyonun üzerinde geliştiriciye ev sahipliği yapan GitHub, açık kaynak projelerin merkezi haline gelmiştir. Ancak GitHub sadece kod barındırma değil, proje yönetimi, kod inceleme, CI/CD ve dokümantasyon gibi kapsamlı araçlar da sunar.
GitHub'ın temel özellikleri arasında Pull Request ile kod inceleme, Issues ile hata takibi ve özellik istekleri, Actions ile CI/CD otomasyonu, Projects ile proje yönetimi, Discussions ile topluluk tartışmaları ve Packages ile paket yönetimi yer alır. Bu araçlar, yazılım geliştirme yaşam döngüsünün tamamını tek bir platformda yönetmenizi sağlar.
Branch Stratejileri
Ekip halinde çalışırken düzenli bir branch stratejisi benimsemek kritik önem taşır. En yaygın stratejiler Git Flow, GitHub Flow ve Trunk-Based Development'tır.
- Git Flow: main, develop, feature, release ve hotfix dallarından oluşan kapsamlı bir modeldir. Planlı sürüm döngüleri olan projeler için uygundur.
- GitHub Flow: Daha basit bir yaklaşımdır. main dalı her zaman dağıtıma hazırdır. Her özellik için branch oluşturulur, pull request ile incelenir ve main'e merge edilir.
- Trunk-Based Development: Geliştiriciler doğrudan main dala küçük, sık commit'ler yapar. Feature flag'ler ile tamamlanmamış özellikler gizlenir. Sürekli entegrasyon ve sürekli dağıtım için idealdir.
Pull Request ve Kod İnceleme
Pull Request (PR), bir branch'teki değişikliklerin başka bir branch'e merge edilmesi için yapılan resmi istektir. PR süreci, ekip iş birliğinin ve kod kalitesinin temelini oluşturur. İyi bir PR; açıklayıcı başlık ve açıklama içermeli, küçük ve odaklı olmalı, testlerle desteklenmeli ve ekran görüntüleri veya GIF'lerle görsel kanıtlar sunmalıdır.
Kod inceleme sadece hata bulmak değil, bilgi paylaşımı ve ekip standartlarını korumaktır. Her PR bir öğrenme fırsatıdır.
Kod inceleme sürecinde yapıcı geri bildirim vermek, kodun mantığını sorgulamak, potansiyel performans sorunlarını tespit etmek ve güvenlik açıklarını kontrol etmek önemlidir. Otomatik kontroller (linting, testler, güvenlik taraması) ile PR sürecini güçlendirmek, manuel inceleme yükünü azaltır.
İleri Seviye Git Özellikleri
Git'in temel komutlarının ötesinde, cherry-pick ile belirli commit'leri seçerek farklı branch'lere uygulayabilir, rebase ile commit geçmişini düzenleyebilir, bisect ile hatalı commit'i otomatik olarak bulabilir ve submodule ile alt projeleri yönetebilirsiniz. Git hooks ile commit öncesi ve sonrası otomatik kontroller ve işlemler tanımlayabilirsiniz. Bu gelişmiş özellikler, profesyonel yazılım geliştirme süreçlerinde büyük kolaylık sağlar.
Sonuç
Git ve GitHub, modern yazılım geliştirmenin temel araçlarıdır. Bireysel projelerden kurumsal yazılım geliştirmeye kadar her ölçekte versiyon kontrolü, iş birliği ve otomasyon sağlar. Git'i etkili kullanmak, yazılımcı olarak verimliliğinizi ve ekip çalışması kalitenizi önemli ölçüde artıracaktır. Profesyonel yazılım geliştirme süreçlerinizde Git iş akışlarını optimize etmek için uzman desteğimizden faydalanabilirsiniz.