Git'te Depo: Nedir, Hangi Türleri Vardır ve Nasıl Çalışır

Yazar: IT Sectr Yayınlanma: 2026-05-09 Okuma süresi: 8 dk

Git Deposu — Git'in geliştirme boyunca her dosya değişikliğini izlediği proje kaynak kod deposudur. Depo, commit'lerin, dalların ve etiketlerin tam geçmişini içerir ve geliştiricilerin kod üzerinde birlikte çalışmasını sağlar. Git, 2024'e göre depo, herhangi bir sürüm kontrol sisteminin temelidir ve dünya çapında milyonlarca projede kullanılmaktadır.

Ana Noktalar

  • Git Deposu — .git hizmet klasörüne sahip proje dizinidir ve tüm değişiklik geçmişi burada saklanır.
  • Yerel Depo — geliştiricinin bilgisayarında bulunur ve internet bağlantısı olmadan kod üzerinde çalışmayı sağlar.
  • Uzak Depo — GitHub, GitLab veya Bitbucket sunucusunda barındırılır ve katılımcılar arasında senkronizasyon için kullanılır.
  • Git — verileri değişiklik listesi olarak değil, dosyaların anlık görüntüleri olarak saklar, bu da dallama ve birleştirme işlemlerini hızlandırır.
  • Sürüm Kontrol Sistemi — aynı proje üzerinde eşzamanlı çalışma sorununu çözer, kod birleştirme sırasında çakışmaları önler.

Git'te Depo Nedir

Git Deposu — sürüm kontrol sisteminin proje dosyalarındaki değişiklik geçmişini tanımlayan meta verileri ve nesneleri sakladığı bir veri yapısıdır. Bir geliştirici git init komutuyla bir depo başlattığında, Git proje kökünde gizli bir .git klasörü oluşturur.

Bu klasörün içinde sistemin çalışması için gerekli tüm nesneler, referanslar ve yapılandırma dosyaları bulunur. Depo belirli bir konuma bağlı değildir — geliştirici onu yerel olarak oluşturabilir ve daha sonra uzak bir sunucuya bağlayabilir.

Git, dağıtık depo modelini kullanır: projenin her üyesi bilgisayarında geçmişin tam bir kopyasına sahiptir. Bu, çoğu işlemin — commit, geçmiş görüntüleme, dal oluşturma — sunucuya bağlanmadan yerel olarak gerçekleştirildiği anlamına gelir.

Git belgelerine göre, dağıtık mimari sistemi hatalara karşı dayanıklı kılar: sunucu çökerse, herhangi bir yerel depo projenin tam geçmişini geri yüklemek için kaynak olabilir.

Yerel ve Uzak Depo

Yerel Depo — geliştiricinin bilgisayarındaki projenin bir kopyasıdır. Commit, dal ve etiketlerin tam geçmişini içerir ve ağ bağlantısı olmadan commit, branch, merge ve rebase işlemlerini gerçekleştirmeye olanak tanır.

Uzak Depo — bir sunucuda barındırılır ve tüm ekip üyeleri için senkronizasyon noktası görevi görür. Geliştiriciler değişikliklerini git push komutuyla gönderir ve başkalarının değişikliklerini git pull komutuyla alır.

Yerel ve uzak depo arasındaki bağlantı, remote origin — Git yapılandırmasında saklanan sunucu URL'si — aracılığıyla yapılandırılır. Bir yerel depo, birden çok uzak depoya bağlanabilir; bu, fork'larla çalışırken kullanışlıdır.

Bu modelin ana avantajı, geliştiricinin çevrimdışı olarak kod üzerinde çalışabilmesi ve değişiklikleri yalnızca sonucu göndermeye hazır olduğunda senkronize edebilmesidir.

Yerel ve Uzak Depo Arasındaki Farklar

ÖzellikYerelUzak
KonumGeliştiricinin bilgisayarındaSunucuda (GitHub, GitLab)
Çevrimdışı ErişimTüm işlemlere tam erişimBağlantı olmadan kullanılamaz
SenkronizasyonUzakla Push/PullYerelden push alır
YedeklemeVeri kaybına karşı korumasızYedekli sunucuda saklanır

Git Depoda Verileri Nasıl Saklar

Git'in depolama modeli diğer sürüm kontrol sistemlerinden temel olarak farklıdır. Sürümler arasındaki değişiklik listesini (delta) saklamak yerine, Git her commit anında projenin tüm dosyalarının tam anlık görüntülerini saklar.

Depodaki her nesne, benzersiz bir 40 karakterli SHA-1 karması ile tanımlanır. Bir dosyanın içeriği commit'ler arasında değişmemişse, Git yeni bir nesne oluşturmaz, mevcut olanı yeniden kullanır — bu yerden tasarruf sağlar.

Git dört tür nesne kullanır: blob (dosya içeriği), tree (dizin yapısı), commit (meta verili anlık görüntü) ve tag (bir commit'e adlandırılmış referans). Tüm nesneler .git/objects klasöründe saklanır.

Git Internals'a göre, Git'in nesne modeli veri bütünlüğünü garanti eder: dosya içeriğindeki herhangi bir değişiklik yeni bir karma üretir ve bu da geçmişin fark edilmeden değiştirilmesini imkansız kılar.

.git Klasörünün Yapısı

.git klasörü deponun kalbidir. O olmadan Git değişiklikleri izleyemez ve sıradan bir dizin yalnızca bir dosya koleksiyonu olarak kalır. Bu klasörün yapısını anlamak, depo sorunlarını teşhis etmeye yardımcı olur.

  • objects/ — deponun tüm nesneleri: blobs, trees, commits, tags. Sıkıştırılmış biçimde saklanır.
  • refs/ — commit'lere referanslar: heads (dallar), tags (etiketler), remotes (uzak dallar).
  • HEAD — mevcut aktif dalı veya commit'i gösteren dosya.
  • config — depo ayarları: uzak URL, kullanıcı adı, e-posta ve diğer parametreler.
  • index — Git'in commit için hazırlanan dosyalar hakkında bilgi sakladığı hazırlık alanı.
  • logs/ — HEAD ve dalların hareket geçmişini saklayan referans güncelleme günlükleri (reflog).

HEAD dosyası özel ilgiyi hak ediyor. Normal durumda bir dala sembolik referans içerir, örneğin ref: refs/heads/main. Detached HEAD durumunda doğrudan bir commit'i gösterir — bu, yeni commit'lerin hiçbir dala bağlanmayacağı anlamına gelir.

Depo ile Temel İşlemler

Git deposu ile çalışmak, geliştiricinin günlük olarak gerçekleştirdiği bir dizi temel işlemi içerir. Her işlem, yeni nesneler ekleyerek veya referansları taşıyarak deponun durumunu değiştirir.

  • git init — geçerli dizinde yeni bir boş depo oluşturur. Git, başlangıç yapısıyla .git klasörünü oluşturur.
  • git clone — var olan bir uzak depoyu tüm commit geçmişiyle birlikte yerel makineye kopyalar.
  • git add — dosya değişikliklerini hazırlık alanına (dizin) ekler, commit'e hazırlar.
  • git commit — dizindeki verilere dayanarak projenin anlık görüntüsünü oluşturur ve yeni bir commit nesnesi olarak kaydeder.
  • git push — yerel depodan uzak depoya yeni commit'ler gönderir, sunucudaki dalları günceller.
  • git pull — uzak depodan yeni commit'ler alır ve bunları mevcut yerel dalla birleştirir.

Push ve pull işlemleri, uzak sunucuya bağlantı gerektiren tek işlemlerdir. Diğer tüm işlemler tamamen yerel olarak gerçekleştirilir ve büyük geçmiş hacminde bile yüksek hız sağlar.

Depoda Dosya Yaşam Döngüsü

Depodaki her dosya dört durumdan geçer: untracked (izlenmeyen), modified (değiştirilmiş), staged (hazırlanmış) ve committed (commitlenmiş). Git, yalnızca git add ile açıkça eklenmiş veya zaten commit geçmişinde olan dosyaları izler.

Bu modeli anlamak, Git ile etkili bir şekilde çalışmanın anahtarıdır. Geliştirici, değiştirilen dosyaların yalnızca bir kısmını seçerek commit için hazırlayabilir ve net bir açıklamayla mantıksal olarak tamamlanmış commit'ler oluşturabilir.

Uzak depo genellikle web arayüzü, erişim yönetim sistemi ve ortak geliştirme için ek araçlar sağlayan özel platformlarda barındırılır.

  • GitHub — 100 milyondan fazla depo ile en büyük platform. Actions, Pull Requests, Issues ve Wiki sunar. Herkese açık projeler için ücretsiz.
  • GitLab — entegre CI/CD, Container Registry ve yerleşik DevOps boru hattına sahip platform. SaaS ve self-hosted sürüm olarak kullanılabilir.
  • Bitbucket — Jira ve Trello entegrasyonuyla Atlassian çözümü. Esnek erişim ayarları sayesinde kurumsal ortamlarda popüler.

Platform seçimi, ekip büyüklüğüne, gizlilik gereksinimlerine ve gerekli entegrasyonlara bağlıdır. Mobil geliştirme için, geniş topluluk desteği ve iOS ile Android için CI/CD araçlarıyla entegrasyonu nedeniyle genellikle GitHub seçilir.

Depo ile Çalışmak İçin Komut Örnekleri

Pratik bir senaryo düşünelim: bir geliştirici mevcut bir depoyu klonlar, yeni bir dal oluşturur, değişiklikler yapar ve bunları sunucuya gönderir. Her komut, deponun farklı bileşenleriyle çalışmayı gösterir.

bash
# Uzak bir depoyu klonlama
git clone https://github.com/user/mobile-app.git

# Proje dizinine gitme
cd mobile-app

# Yeni bir feature dalı oluşturma ve ona geçme
git checkout -b feature/auth

# Değiştirilen dosyaların durumunu kontrol etme
git status

# Tüm değişiklikleri hazırlık alanına ekleme
git add .

# Açıklamayla commit oluşturma
git commit -m "Add authentication module"

# Değişiklikleri uzak depoya gönderme
git push origin feature/auth

git status komutu günlük çalışmada en kullanışlı komutlardan biridir. Hangi dosyaların değiştirildiğini, hangilerinin commit'e hazır olduğunu ve hangilerinin Git tarafından hiç izlenmediğini gösterir.

Commit Geçmişini Görüntüleme

Depo geçmişini analiz etmek için git log komutu çeşitli biçimlendirme bayraklarıyla kullanılır. Commit'lerin kronolojisini, yazarlarını, tarihlerini ve SHA-1 tanımlayıcılarını gösterir.

bash
# Dal grafiği görselleştirmesiyle geçmişi görüntüleme
git log --oneline --graph --all

# Belirli bir commit'teki değişiklikleri görüntüleme
git show a1b2c3d

# Mevcut durumu son commit'le karşılaştırma
git diff HEAD

# Belirli bir dosyanın geçmişini görüntüleme
git log --follow src/MainActivity.kt

--graph bayrağı, dallanmanın ASCII grafiğini görüntüler; bu, birden çok dalda aktif çalışma olan depolarda özellikle kullanışlıdır. Sık sürüm çıkaran mobil projeler için görsel grafik, geliştirme yapısını hızlıca değerlendirmeye yardımcı olur.

Sıkça Sorulan Sorular

Depo ile proje arasındaki fark nedir?

Depo, değişiklik geçmişiyle birlikte kodun teknik bir deposudur. Proje, depoyu, görev yönetim sistemini, belgeleri ve geliştirme süreçlerini içeren daha geniş bir kavramdır. Bir proje birden çok depo içerebilir.

GitHub'da nasıl depo oluşturulur?

New düğmesine tıklayarak GitHub web arayüzü üzerinden yeni bir depo oluşturun. Bir ad, açıklama ve erişim düzeyi belirtin. Ardından depoyu yerel makineye klonlayın veya git remote add origin ile mevcut bir yerel depoya bağlayın.

Silinmiş bir depo geri yüklenebilir mi?

Uzak depo sunucudan silinmişse ancak en az bir geliştiricinin yerel kopyası varsa, depo geri yüklenebilir. Yeni bir uzak depo oluşturun ve tam geçmişle birlikte yerel kopyadan git push --force komutunu çalıştırın.

Depo fork'u nedir?

Fork, hesabınızdaki başka birine ait deponun bir kopyasıdır. Geçmişin tam kopyasını alırsınız ve orijinali etkilemeden herhangi bir değişiklik yapabilirsiniz. Fork'lar, Pull Request'ler aracılığıyla açık kaynak projelere katılmak için kullanılır.

Depo boyutu nasıl küçültülür?

Nesneleri sıkıştırmak ve ulaşılamaz verileri kaldırmak için git gc kullanın. git filter-branch veya git filter-repo ile geçmişten büyük dosyaları kaldırın. İkili dosyaları olan projeler için Git LFS'yi (Large File Storage) değerlendirin.

Özet

  • Git Deposu — her commit'in belirli bir zamandaki tüm proje dosyalarının anlık görüntüsü olduğu, tam değişiklik geçmişine sahip kod deposu.
  • Yerel Depo — geliştiricinin bilgisayarında bulunur ve ağ bağlantısı olmadan tüm Git işlemlerini destekler.
  • Uzak Depo — push ve pull ile ekip çalışmasını senkronize eder, tüm katılımcılar için tek bir doğruluk kaynağı sağlar.
  • .git klasörü — tüm hizmet bilgilerini içerir: nesneler, dal referansları, yapılandırma ve reflog işlem günlüğü.
  • GitHub, GitLab ve Bitbucket — ek CI/CD araçlarıyla uzak depo barındırma için ana platformlardır.
  • Git'in nesne modeli — her nesneyi tanımlamak için SHA-1 karmalarını kullanarak depo veri bütünlüğünü garanti eder.
  • Öneri: günde en az bir kez commit yapın ve her çalışma aşamasını tamamladıktan sonra uzak depo ile senkronize olun.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun