Ben dağıtılmış versiyon kontrolü Tao'da kendimi yeniden eğitmek için mücadele eden başka bir Subversion kullanıcısıyım.
Subversion'u kullanırken, projenin önemsiz yaklaşımının büyük bir hayranıydım ve eski işverenlerimin çoğuyla depo şubelerimizi yapılandıracağız; etiketler ve gövde aşağıdaki gibi:
branches-+
+-personal-+
| +-alice-+
| | +-shinyNewFeature
| | +-AUTOMATED-+
| | +-shinyNewFeature
| +-bob-+
| +-AUTOMATED-+
| +-bespokeCustomerProject
+-project-+
+-shinyNewFeature
+-fixStinkyBug
tags-+
+-m20110401_releaseCandidate_0_1
+-m20110505_release_0_1
+-m20110602_milestone
trunk
Gerçek kaynak ağacın içinde, aşağıdaki yapıyı kullanırdık (şöyle bir şey):
(src)-+
+-developmentAutomation-+
| +-testAutomation
| +-deploymentAutomation
| +-docGeneration
| +-staticAnalysis
| +-systemTest
| +-performanceMeasurement
| +-configurationManagement
| +-utilities
+-libraries-+
| +-log-+
| | +-build
| | +-doc
| | +-test
| +-statistics-+
| | +-build
| | +-doc
| | +-test
| +-charting-+
| | +-build
| | +-doc
| | +-test
| +-distributedComputing-+
| | +-build
| | +-doc
| | +-test
| +-widgets-+
| +-build
| +-doc
| +-test
+-productLines-+
| +-flagshipProduct-+
| | +-coolFeature
| | +-anotherCoolFeature
| | +-build
| | +-doc
| | +-test
| +-coolNewProduct
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
Fikir, mühendislik ekibi arasındaki iletişimi yapılandırmaya yardımcı olmak için havuzun yapısını kullanmaktı (ve hala da öyleydi); işletmenin müşteriye dönük kısmı ve diğer çeşitli paydaşlar ve alan uzmanları.
Görmek için: "Proje" dizinlerinden birinde yer alan kaynak belgeler sadece bir kez kullanılır (ve para kazanır). "ProductLines" dizinlerinden birinde yer alan dokümanlar, söz konusu satırdaki bir ürünün satıldığı kadar para kazanır. "Kütüphaneler" dizinlerinden birinde yer alan dokümanlar, bunları kullanan ürünlerin satıldığı kadar çok para kazanır.
Maliyetlerin amortisman kavramını açık hale getirir ve işletme genelinde kaynak belgenin yeniden kullanımı için destek oluşturulmasına yardımcı olur.
Ayrıca, yapı otomasyon araçlarımızın üzerinde çalışabileceği ortak bir yapı olduğu anlamına gelir. (Derleme komut dosyalarımız, her bir bileşenin nasıl oluşturulacağını belirten yapılandırma dosyalarını buldukları "derleme" klasörlerini arayan kaynak ağacında yürür; belge oluşturma ve test için de benzer bir işlem gerçekleşir).
Önemli olarak, üzerinde çalıştığım ürünlerin performans ölçüm ve karakterizasyon testlerini yürütmesi genellikle UZUN zaman alır; 20 ila 200 saat; birkaç GB ila birkaç TB arasında işlenmiş test sonuçları / ara veri (bir yerde saklanması ve belirli bir sistem yapılandırmasına bağlı olması gerekir; böylece zaman içindeki performans artışı ölçülebilir). Bu sorun, yapılandırma yönetimini önemli bir husus haline getirir ve aynı zamanda, tipik olarak performans ölçümü ve karakterizasyon testlerini çalıştırmak için gereken hesaplama kaynakları sınırlı olduğundan, merkezileşme için bazı gereksinimler getirir; (64-128 çekirdekli küçük bir küme).
Son bir not olarak; sürekli entegrasyon sistemi bir yapıyı tetiklemesi gerektiğini bilir; statik analiz; duman testi ve birim test çalıştırması her gövde değişikliğinde, her "etiket" dalı her değiştiğinde ve her "OTOMATİK" dal dalı her değiştirildiğinde. Bu şekilde, bireysel geliştiriciler CI sistemini kendi kişisel şubeleri olan önemli bir yetenek olan IMHO ile kullanabilirler.
Şimdi, sorum şu: Yukarıdakilerin tümünü Mercurial ile nasıl çoğaltabilirim (ve mümkünse geliştirebilirim).
--Düzenle:
Şu andaki düşünme şeklim, merkezi bir Subversion Deposu kullanmak, genel yapıyı tanımlamak, ancak hg'nin bir istemci olarak kullanılmasına izin vermek, böylece geliştiricilerin yerel olarak depolara sahip olmasını sağlamaktır.