Polyrepo
- Okunuşu
- poli ripo
Kısaca
Polyrepo, her projenin, servisin ya da kütüphanenin kendi geçmişi, hattı ve sürüm döngüsü olan ayrı bir sürüm kontrol deposunda tutulduğu düzendir.
Polyrepo nedir?
Multi-repo olarak da anılan polyrepo düzeninde bir kuruluş her projeye kendi deposunu verir: web uygulaması, mobil uygulama, her backend servisi ve her paylaşılan kütüphane ayrı tutulur. Çoğu ekip ve neredeyse bütün açık kaynak projeleri varsayılan olarak böyle çalışır, çünkü GitHub ve GitLab gibi barındırma servisleri proje başına bir depo fikri üzerine kuruludur. Sözcük daha çok, her şeyin tek bir depoda durduğu monorepo'nun karşılığı olarak yaygınlaştı.
Her deponun kendi geçmişi, erişim kuralları, CI hattı ve sürüm takvimi vardır; böylece ekipler bağımsız çalışıp bağımsız olarak dağıtım yapabilir. Paylaşılan kod, örneğin npm'e ya da Maven'a sürümlü paketler olarak yayımlanır ve diğer depolar belirli bir sürüme bağımlı olur; bazı ekipler bunun yerine Git submodule'lerini kullanır. Dependabot ve Renovate gibi araçlar, bir bağımlılığın yeni sürümü çıktığında otomatik olarak pull request açar.
Polyrepo, tek bir apartman yerine ayrı evlerden oluşan bir mahalleye benzer: her ailenin kendi anahtarı ve kuralları vardır, ama bir şey ödünç almak komşunun kapısına kadar yürümek demektir. Bedeli, birden fazla depoyu kapsayan değişikliklerde ortaya çıkar: paylaşılan bir kütüphaneyi güncellemek, yeni bir sürüm yayımlayıp ardından onu kullanan her projeyi ayrı pull request'lerle yükseltmek demektir; sürümler zamanla birbirinden uzaklaşır, derleme araçları ve yapılandırmalar da tekrarlanır.
Polyrepo ile monorepo arasındaki fark, kodun nasıl çalıştığıyla değil, nerede saklandığıyla ilgilidir. Mikroservisler polyrepo gerektirmez, bir monolit de başka depolardaki kütüphaneleri kullanabilir. Monorepo'lar projeler arası değişiklikleri atomik yapar ve her şeyi aynı sürümde tutar; polyrepo'lar ise her ekibe özerklik verir ve depoları küçük ve hızlı tutar; birçok kuruluş da ürün alanı başına birkaç monorepo kurarak ikisini karıştırır.
Önemli noktalar
- Polyrepo, her projeye ya da servise kendi deposunu verir.
- Ekipler bağımsız geçmişlere, izinlere, hatlara ve sürümlere sahip olur.
- Paylaşılan kod, sürümlü paketler ya da Git submodule'leri olarak taşınır.
- Depolar arası değişiklikler birkaç pull request ve sürüm yükseltmesi gerektirir.
- Monorepo ile polyrepo farkı, mikroservis ile monolit farkı değil, kodun saklanma biçimidir.
Örnek
# The shared library and the app live in separate repositories
git clone git@github.com:acme/ui-kit.git
git clone git@github.com:acme/web-app.git
# 1. Change the library, then release a new version
cd ui-kit
npm version minor # 2.3.0 -> 2.4.0, with a commit and a Git tag
npm publish
# 2. The app upgrades when its team is ready, in its own pull request
cd ../web-app
npm install @acme/ui-kit@2.4.0
git commit -am "chore: upgrade ui-kit to 2.4.0"Sık sorulan sorular
Polyrepo ile monorepo arasındaki fark nedir?
Polyrepo her projeye kendi deposunu verir, monorepo ise birçok projeyi tek bir depoda tutar. Polyrepo'lar ekip bağımsızlığını ve küçük depoları, monorepo'lar ise ortak araçları ve projeler arası atomik değişiklikleri öne çıkarır.
Mikroservisler her zaman polyrepo'da mı tutulur?
Hayır. Kodun nasıl saklandığı, nasıl dağıtıldığından bağımsızdır. Birçok şirket düzinelerce mikroservisi tek bir monorepo'da tutar, bazıları da tek bir uygulamanın kütüphanelerini birkaç depoya böler.
Polyrepo'da depolar arasında kod nasıl paylaşılır?
Genellikle kodu npm, Maven ya da PyPI gibi, çoğu zaman özel bir kayıt defterine sürümlü bir paket olarak yayımlayarak. Git submodule'leri başka bir seçenektir, ama günlük kullanımda onlarla çalışmak daha zordur.
İlgili sayfalar
- MonorepoSürüm Kontrolü, s. 31Monorepo, uygulamalar, servisler ve paylaşılan kütüphaneler gibi birçok projenin kodunu birlikte yönetilen tek bir sürüm kontrol deposunda tutma yaklaşımıdır.
- RepositorySürüm Kontrolü, s. 35Repository, bir projenin tüm dosyalarını ve sürüm kontrol sisteminin kaydettiği her değişikliğin eksiksiz geçmişini barındıran depolama alanıdır.
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- Semantic VersioningSürüm Kontrolü, s. 36Semantic versioning, her bölümün bir sürümün uyumluluğu bozduğunu, özellik eklediğini ya da hata düzelttiğini belirttiği MAJOR.MINOR.PATCH şemasıdır.
- MikroservislerYazılım Mimarisi, s. 25Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- Paket YöneticisiProgramlamanın Temelleri, s. 48Paket yöneticisi, yazılım paketlerini ve onların bağımlılıklarını kuran, güncelleyen ve kaldıran, sürümleri otomatik olarak çözen bir araçtır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin