# Monorepo vs Polyrepo

Adres: https://softwaredictionary.org/tr/karsilastirma/monorepo-vs-polyrepo
Son güncelleme: 2026-10-06

Kısaca: Monorepo birçok projeyi birlikte değişebilsinler diye tek bir depoda tutar; polyrepo ise her projeye kendi deposunu, geçmişini ve sürüm döngüsünü verir.

## Monorepo ile polyrepo arasındaki fark nedir?

Monorepo; uygulamalar, servisler ve paylaşılan kütüphaneler gibi birbiriyle ilişkili birçok projeyi, genellikle `apps/` ve `packages/` gibi klasörlerde, tek bir sürüm kontrol deposunda saklar. Multi-repo olarak da anılan polyrepo düzeni ise her projeye kendi geçmişi, izinleri, CI hattı ve sürümleri olan ayrı bir depo verir. İkisi de kodun nasıl çalıştığını değil, nerede saklandığını tanımlar.

Asıl fark, paylaşılan kodun nasıl dolaştığıdır. Monorepo'da paylaşılan bir kütüphanedeki değişiklik ve onu kullanan her projedeki uyarlama tek bir atomik commit ve pull request'te yapılabilir; her şey de her zaman güncel sürüme karşı derlenir. Polyrepo'da ise kütüphane sürümlü bir paket olarak yayımlanır ve onu kullanan her proje, ekibi hazır olduğunda kendi pull request'iyle yükseltme yapar; bu ekiplere bağımsızlık verir, ama sürümler birbirinden uzaklaşır ve birçok projeyi kesen değişiklikler pek çok adım ister.

Her model ölçeklenmek için araç ister. Monorepo'lar npm, pnpm ya da Yarn'daki workspace'lere, sonuçları önbelleğe alıp yalnızca bir değişikliğin etkilediği görevleri çalıştıran Nx, Turborepo ya da Bazel gibi derleme sistemlerine ve `CODEOWNERS` dosyası gibi sahiplik kurallarına dayanır. Polyrepo'lar ise paket kayıt defterlerine ve yükseltme pull request'leri açan Dependabot ve Renovate gibi botlara dayanır. Birçok kuruluş da ürün alanı başına birkaç monorepo kurarak ikisini karıştırır.

Sık yapılan bir yanlış, monorepo'nun monolit demek olduğu ya da mikroservislerin polyrepo gerektirdiği düşüncesidir. Tek bir monorepo, birbirinden bağımsız dağıtılan düzinelerce servisi barındırabilir; bir monolit de başka depolardaki kütüphaneleri kullanabilir. Bir başkası, monorepo'ların yalnızca dev şirketlere uyduğu düşüncesidir; küçük ekipler, CI yalnızca değişeni derlediği sürece tek bir depoyu çoğu zaman daha basit bulur.

| Özellik | Monorepo | Polyrepo |
| --- | --- | --- |
| Depolar | Birçok proje için tek depo | Proje, servis ya da kütüphane başına bir depo |
| Projeler arası değişiklik | Tek bir atomik commit ve pull request | Kütüphanenin yeni bir sürümü, ardından onu kullanan her projede bir pull request |
| Paylaşılan kod | Doğrudan kaynaktan, her zaman güncel sürümüyle içe aktarılır | Bir kayıt defterinden sürümlü paketler olarak kullanılır |
| Bağımlılık sürümleri | Genellikle her bağımlılığın herkes için tek bir sürümü | Her depo kendi seçer; sürümler zamanla birbirinden uzaklaşır |
| Ekip bağımsızlığı | Daha düşük: ortak araçlar, kurallar ve ana dal | Daha yüksek: kendi geçmişi, izinleri, hattı ve sürümleri |
| Erişim denetimi | Erişimi olan herkes bütün kodu görür; `CODEOWNERS` yola göre inceleyicileri belirler | Depo başına ayarlanır; böylece kod bir ekibe özel kalabilir |
| Gereken araçlar | Workspace'ler ve yalnızca değişeni derlemek için Nx, Turborepo ya da Bazel | Bir paket kayıt defteri ve Dependabot ya da Renovate gibi botlar |
| Ölçeklenme sancıları | Büyük klonlar, yavaşlayan Git işlemleri, etkilenmeyen işi atlaması gereken CI | Tekrarlanan yapılandırma, sürüm kayması, birçok depoya yayılan değişiklikler |

## Monorepo şu durumlarda doğru seçim

- Projeler çok kod paylaşıyor ve sık sık birlikte değişiyor.
- Büyük yeniden düzenlemeler ve bağımlılık yükseltmeleri tek bir commit'te yapılmalı.
- Tek bir araç, lint ve CI yapılandırması her yerde geçerli olmalı.
- Küçük bir ekip frontend, backend ve paylaşılan paketler üzerinde birlikte çalışıyor.

## Polyrepo şu durumlarda doğru seçim

- Ekipler ayrı servislerin sahibi ve kendi takvimlerine göre sürüm çıkarıyor.
- Projeler az kod paylaşıyor ya da paylaştıklarını kararlı, sürümlü paketlerle paylaşıyor.
- Erişim projeye göre farklı olmalı; örneğin dış yükleniciler ya da açık kaynak bölümler için.
- Her deponun küçük kalmasını istiyorsunuz ve ek derleme araçlarına ihtiyacınız yok.

## Sık sorulan sorular

**Monorepo, monolit ile aynı şey midir?**

Hayır. Monolit, tek bir birim olarak dağıtılan tek bir uygulamadır; monorepo ise yalnızca kodu saklama biçimidir ve birbirinden bağımsız derlenip dağıtılan birçok servisi barındırabilir.

**Büyük şirketler monorepo kullanır mı?**

Google ve Meta dahil bazı tanınmış şirketler, o ölçek için geliştirdikleri özel araçlarla kullanır. Birçoğu ise polyrepo ya da ikisinin bir karışımını kullanır; yani şirket büyüklüğü tek başına bu kararı belirlemez.

**Polyrepo'dan monorepo'ya geçebilir miyim?**

Evet. `git subtree` ya da `git filter-repo`, depoları geçmişlerini koruyarak birleştirebilir; ardından workspace'ler projeleri birbirine bağlar. Ekipler genellikle önce birbirine en sıkı bağlı projeleri taşır.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
