Repository (Kod Deposu) Nedir?
Kısa tanım
Repository (repo, kod deposu), bir projenin dosyalarını ve bu dosyaların tüm değişiklik geçmişini birlikte saklayan, bir sürüm kontrol sistemi tarafından yönetilen depodur. Git'te repository'nin özü proje klasöründeki gizli .git dizinidir; commit'ler, branch'ler ve etiketler burada tutulur. Aynı repository'nin bir kopyası geliştiricinin bilgisayarında (yerel), bir kopyası da GitHub veya GitLab gibi bir sunucuda (uzak) bulunabilir.
Diğer adları: repo, kod deposu, Git deposu, depo, monorepo

Bir repository'nin içinde ne var?
Git ile çalışan bir proje klasörü iki katmandan oluşur. Görünen katman, üzerinde çalıştığınız dosyalardır (çalışma ağacı). Asıl repository ise gizli .git dizinidir: tüm commit'lerin sıkıştırılmış içerikleri, branch ve etiket işaretçileri, o anda hangi branch'te olduğunuzu gösteren HEAD ve repository'ye özel ayarlar burada durur. Bu dizini silerseniz dosyalarınız kalır ama geçmişiniz gider.
Dosya düzeyinde de iyi düzenlenmiş repository'lerin ortak parçaları vardır:
README: Projenin ne olduğu, nasıl kurulup çalıştırılacağı..gitignore: Repository'ye girmeyecek dosyalar (bağımlılık klasörleri, derleme çıktıları,.env).- Lockfile: Kurulan bağımlılık sürümlerinin kaydı.
- CI tanımları (ör.
.github/workflows/) ve kod sahiplerini belirtenCODEOWNERSdosyası. - Açık kaynak projelerde
LICENSE.
Yerel ve uzak repository
Git dağıtık olduğu için her geliştiricinin bilgisayarındaki kopya da tam bir repository'dir. Ekip ise genellikle ortak bir uzak repository (remote) üzerinde buluşur; varsayılan adı origin'dir.
git clone https://github.com/ornek-firma/web-sitesi.git
cd web-sitesi
git remote -v # bağlı uzak repository'leri listeler
git pull # uzaktaki yeni commit'leri al
git push # yerel commit'leri gönderClone, mevcut bir repository'nin tüm geçmişiyle kopyalanmasıdır. Fork ise barındırma hizmetinde başka birinin repository'sinin kendi hesabınıza kopyalanmasıdır; özellikle açık kaynak projelere yazma yetkiniz olmadan katkı yapmanın yoludur. Fork'ta yaptığınız değişiklikleri asıl projeye bir pull request ile önerirsiniz.
Monorepo mu, çoklu repo mu?
| Monorepo | Çoklu repo (polyrepo) | |
|---|---|---|
| Yapı | Web sitesi, API, paylaşılan paketler tek repository'de | Her uygulama veya servis ayrı repository'de |
| Ortak değişiklik | Birden çok parçaya dokunan değişiklik tek commit'te yapılır | Birkaç repository'de sıralı değişiklik ve sürüm koordinasyonu gerekir |
| Erişim kontrolü | İnce ayar zordur; herkes çoğu kodu görür | Repository bazında kolayca ayrılır |
| Araç ihtiyacı | Büyüdükçe akıllı derleme ve test araçları gerekir | Her repo basit kalır, ama tekrar eden yapılandırma artar |
Küçük ve orta ölçekli ekipler için tek bir ürünün parçalarını bir monorepo'da tutmak çoğu zaman en az sürtünmeli seçenektir. Farklı ekiplerin farklı yayın döngüleriyle sahiplendiği servislerde ise ayrı repository'ler daha doğal olabilir.
Erişim, gizlilik ve güvenlik
Repository'ler herkese açık (public) ya da özel (private) olabilir. Özel bir repository'de bile şu ilkeler geçerlidir:
- En az yetki: Her kişiye ve otomasyona işinin gerektirdiği kadar erişim verin; sunucuya kod çeken bir dağıtım anahtarının yazma yetkisine ihtiyacı yoktur. En az yetki ilkesi burada da geçerlidir.
- Gizli bilgi yok: Parolalar ve anahtarlar repository'de değil, bir gizli bilgi yönetimi çözümünde durmalıdır. Barındırma hizmetlerinin secret scanning özellikleri yanlışlıkla commit edilmiş anahtarları yakalamaya yardımcı olur.
- Korumalı ana branch: Ana dala doğrudan push yerine onaylı inceleme ve başarılı testler şartı aranabilir.
Repository kimin adına duruyor?
Bir şirket yazılımını dışarıdan yaptırdığında sıkça gözden kaçan bir soru, repository'nin kimin hesabında tutulduğudur. Kod yalnızca ajansın ya da tek bir geliştiricinin kişisel hesabındaysa, iş ilişkisi bittiğinde geçmişe, CI tanımlarına ve dağıtım ayarlarına erişim de belirsizleşir. Sağlıklı düzen, repository'nin müşterinin kurumsal hesabında açılması ve geliştiricilere bu hesap üzerinden yetki verilmesidir.

