Git Nedir? Nasıl Çalışır, Avantajları ve Pratik Kullanım Örnekleri

Git, yazılım kodunun tüm değişikliklerini kaydeden ve yöneten bir versiyon kontrol sistemidir. Geliştiriciler kodun geçmiş sürümlerine erişebilir, değişiklikleri takip edebilir ve ekip halinde çalışabilirler. Açık kaynak olan Git, dağıtık mimarisiyle lokal ve merkezi depoları yönetmeyi mümkün kılar.

5 dk okuma
Git

Git, yazılım geliştirme sürecinde kod dosyalarının tüm değişikliklerini kaydeden, takip eden ve yöneten açık kaynak dağıtık versiyon kontrol sistemidir. Her değişiklik kayıtlı olduğu için geliştiriciler istediği zaman önceki versiyonlara geri dönebilir, paralel çalışma yapabilir ve değişiklikleri yönetebilir. Git, profesyonel yazılım projelerinde standart araç haline gelmiştir.

Git Nasıl Çalışır?

Git, üç temel katman üzerinde çalışır: çalışma dizini (Working Directory), hazırlama alanı (Staging Area) ve depo (Repository).

Çalışma Dizini, bilgisayarınızda bulunan projenizin dosyalarının bulunduğu klasördür. Burada kod yazarken değişiklikleri yaparsınız. Hazırlama Alanı, Git'e hangi değişiklikleri kaydetmek istediğinizi belirttiğiniz alandır. Tüm değişiklikleri kaydetmeyebilirsiniz; seçtiğiniz dosyaları "stage" edersiniz. Depo ise tüm commit'lerin (kayıtların) tutulduğu veri tabanıdır.

Temel akış şöyle çalışır:

  • Kod dosyalarında değişiklik yaparsınız (Çalışma Dizini)
  • Değişiklikleri hazırlama alanına eklersiniz (git add komutu)
  • Hazırlanan değişiklikleri depoya kaydedersiniz (git commit komutu)
  • Değişiklikleri uzak sunucuya gönderirsiniz (git push komutu)

Her commit'in bir kimlik numarası (hash), yazarı, tarihi ve açıklaması vardır. Bu sayede projenin geçmiş tamamı saklanır ve herhangi bir noktaya dönüş mümkündür.

Git'in Temel Kavramları

  • Repository (Depo): Projenizin tüm dosyalarını ve geçmişini depolayan yer. Yerel (bilgisayarınız) veya uzak (GitHub, GitLab gibi) olabilir.
  • Commit: Belirli bir zaman noktasında yapılan değişikliklerin kaydıdır. Her commit'in benzersiz bir kimliği vardır.
  • Branch (Dal): Projenin ayrı bir kopyası gibi davranır. Ana dal (main/master) dışında başka dallarda çalışarak ana kodu bozmaktan korunursunuz.
  • Merge: Farklı dallardaki değişiklikleri birleştirmek işlemidir.
  • Pull Request (PR): Başka birinin kodunuzu incelemesini ve daha sonra merge etmesini istemek için kullanılan mekanizmadır.
  • Clone: Uzak depoyu bilgisayarınıza indirme işlemidir.
  • Push: Yerel bilgisayardaki değişiklikleri uzak depoya göndermedir.
  • Pull: Uzak depodaki değişiklikleri bilgisayarınıza çekmedir.

Git'in Avantajları

  • Dağıtık Yapı: Her geliştirici tam depo kopyasına sahiptir. İnternet bağlantısı olmasa bile çalışabilirsiniz.
  • Sürüm Geçmişi: Proje geçmişinin tamamı kaydedilir. İstediği zaman eski versiyonlara dönebilirsiniz.
  • Ekip İşbirliği: Birden fazla geliştirici aynı proje üzerinde paralel olarak çalışabilir.
  • Dallanma (Branching): Farklı özellikleri ayrı dallarda geliştirebilir, ana kod'u korursunuz.
  • Çatışma Çözümü: Merge sırasında çakışan değişiklikleri görüntüleyip çözebilirsiniz.
  • Hız: Tüm işlemler yerel olarak yapıldığı için çok hızlıdır.
  • Açık Kaynak: Bedava, güvenli ve topluluk tarafından desteklenmiştir.

Git'in Dezavantajları

  • Öğrenme Eğrisi: Başlangıçta komut satırı arayüzü yeni gelenler için kafa karıştırıcı olabilir.
  • Karmaşık Merge: Büyük dallarda merge yaparken çatışmalar zorlayıcı olabilir.
  • Büyük Dosyalar: Git, metin tabanlı kodlar için optimize edilmiştir. Çok büyük binary dosyalarla performans düşer.
  • Veri Yapısı: Deponun yapısını yanlış anlamak hatalara yol açabilir.

Git Nerede Kullanılır?

Git, neredeyse tüm yazılım projelerinde kullanılır:

  • Web Uygulamaları: Frontend ve backend kodunun yönetimi
  • Mobil Uygulamalar: iOS ve Android geliştirmede
  • Oyun Geliştirme: Unity, Unreal Engine gibi motorlarla çalışan projeler
  • Veri Bilimi: Python, R scriptleri ve makine öğrenmesi modellerinin versiyonlanması
  • Dokümentasyon: Teknik yazılar ve API dokumentasyonu
  • Açık Kaynak Projeler: Linux, Python, Node.js gibi dev projelerin yönetimi
  • Korporatif Yazılım: Kurumsal uygulamaların geliştirme ve dağıtımı

Git Platformları

Git protokolü sunucusuz olsa da, kod depolamak ve işbirliği yapmak için platformlar kullanılır:

Platform Özellik Ücret
GitHub En popüler. Pull request, Actions, Pages ve geniş ekosistem. Ücretsiz (sınırlı) + Ücretli
GitLab CI/CD özelliği güçlü. Kendi sunucusunda kurulabilir (self-hosted). Ücretsiz + Ücretli
Gitea Hafif ve basit. Özel sunucularda kullanılabilir. Ücretsiz (Açık Kaynak)
Bitbucket Atlassian ürünleriyle entegrasyon. JIRA bağlantısı kolay. Ücretsiz + Ücretli

Temel Git Komutları

Git'i kullanmak için en sık kullanılan komutlar şunlardır:

  • git init – Yeni bir Git deposu başlatır
  • git clone [URL] – Uzak depoyu bilgisayarınıza indirir
  • git add [dosya] – Dosyaları hazırlama alanına ekler
  • git commit -m "mesaj" – Değişiklikleri depoya kaydeder
  • git push – Yerel değişiklikleri uzak depoya gönderir
  • git pull – Uzak depodan değişiklikleri çeker
  • git branch – Dal oluşturur veya mevcut dalları listeler
  • git checkout [dal_adı] – Başka bir dala geçer
  • git merge [dal_adı] – Belirtilen dalı mevcut dala birleştirir
  • git log – Commit geçmişini görüntüler
  • git status – Depo durumunu gösterir

Git Tarihçesi

Git, 2005 yılında Linux çekirdeği geliştiricisi Linus Torvalds tarafından ihtiyaçtan doğdu. O zamanlar Linux çekirdeği projesi BitKeeper adlı ücretli versiyon kontrol sistemi kullanıyordu. Lisans sorunları nedeniyle Torvalds, güçlü, hızlı ve güvenilir bir alternatif geliştirmeye karar verdi.

İlk ayda Git, Linux çekirdeği projesi için yeterli hale geldi. Daha sonra yazılım geliştirme topluluğu tarafından benimsenmiş ve diğer projeler tarafından da kullanılmaya başlanmıştır. 2008 yılında GitHub platformu kurulduğunda Git hızla ana versiyon kontrol sistemi oldu. Günümüzde milyonlarca proje Git'i kullanmaktadır.

"Git'i oluştururken amacım, hızlı, dağıtık ve güvenilir bir sistem yaratmaktı. Bir insanın beyninde olduğu kadar merkezi olmayan bir yapı istedim." – Linus Torvalds

Git vs SVN vs Mercurial Karşılaştırması

Özellik Git SVN

G harfindeki diğer terimler