Bir monoreponun parçalarını paylaşma


12

Şu anda git submodules repo'su da dahil olmak üzere birçok SVN ve Git deposundan (her biri yaklaşık% 50) oluşan karmaşık ve verimsiz bir yapı sistemimiz var. Ayrıca her şeyi az çok iyi yöneten ev yapımı senaryolarımız da var.
(Kapalı kaynaklı) kod tabanımızın önemli bir noktası, sıkı bir şekilde bağlanmış olması ve her projenin aynı anda aynı sürümde yayınlanmasıdır.

Bunu daha basit bir sisteme ve tek bir VCS'ye taşımak istiyoruz ve git alt modülleri, google Repo ve monorepos gibi çeşitli seçenekleri düşünüyoruz. Nihai VCS henüz tanımlanmamıştır (onu zorunlu kılan seçenekler hariç) ve durumumuza daha iyi uyacaksa svn, git veya başka bir şey olabilir.

Her bir çözümün artı ve eksi özelliklerini listelemeye çalışıyoruz ve şu anda monorepos ile ilgili en önemli sorunlarımızdan biri, sadece bazı modülleri harici bir varlıkla paylaşmanın kolay görünmemesi ve hatta mümkün olmamasıdır. Bu kişilerin bu modüller üzerinde normal şekilde ödeme yapmasını ve çalışmasını istiyoruz, ancak deponun geri kalanının koduna veya geçmişine erişememelerini istiyoruz. Şu anda sık sık veya yoğun olarak yaptığımız bir şey değil, ama gelecekte olabiliriz ve bunun kabus olmasını istemiyoruz çünkü burada kötü bir karar verdik.

Bir VCS sisteminde böyle bir ayrıcalık yönetim sistemi var mı?
Yoksa bu sorunu hafifletmenin bir yolu var mı?


Team Foundation Server'ı veya Hizmeti Düşünür müsünüz? Git'i destekliyor ve bazı hoş iş akışları ve Sürekli Entegrasyon Yetenekleri
içeriyor

Monorepo uygulamasını tam olarak hangisi düşünüyorsunuz?
Dan Cornilescu

Yanıtlar:


3

Açıklamanızdan, burada birkaç seçeneğiniz olduğunu düşünüyorum:

  1. Git alt modüllerini kullanın - GitHub (veya başka bir şey) gibi bir hizmetle, proje başına izinleri yönetebilir ve dağıtım işleminizi çözebilirsiniz. Ancak git submodüllerinin zamanla büyük bir acı haline geldiğini duydum. Git alt modüllerinizi temiz bir şekilde yeniden başlatmak / yeniden indirmek için otomatik komut dosyaları burada yardımcı olabilir.
  2. Repoyu bağımsız hizmetlere ayırın. Bu, eşzamanlı olarak gelişmenizi sağlar, ancak aynı zamanda hizmet keşfi, birden çok hizmetin dağıtımı, geliştirme ortamları, sürekli entegrasyon / dağıtım ve bir yönetimden gelen diğer tüm küçük sevinçler hakkında düşünmeye başlamanız gerektiğinden çok fazla acı verir. mikro hizmet mimarisi.
  3. Python için pip, Node.js için npm, Java için Maven, vb. Gibi resmi bir paket yönetim sistemi kullanın. İhtiyacınız olan kod parçalarını depoya dağıtın ve bunları gerekli şekilde ana depoda tüketin, bu da size yetenek kazandırmalıdır. onları sürüm. Modülleriniz ile ana repo arasındaki bağlantıya bağlı olarak, alt düzey modülleri bağımsız olarak çıkaramaz, çalıştıramaz veya test edemeyebilirsiniz. Eğer varsa can , ancak bu jeller de çoklu depoları hala uzak bir depo onları yükleyerek derleme anda paketlerini entegre mümkün olurken bu gitmek için oldukça iyi bir yoldur.

Ne yazık ki bu seçeneklerin hiçbiri mükemmel değil, ancak kod tabanınızın durumuna bağlı olarak hepsi geçerli. Açıklamanız seçenek 3 gibi geliyor, burada en iyi sonucu alabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.