DVCS, coğrafi olarak dağıtılmış ekipler arasında repo çoğaltmasını kutsadı


9

Şirketim Perforce'tan DVCS'ye geçişi araştırıyor ve şu anda birçok Performancece vekilini kullanıyoruz çünkü yazılım geliştirme ekipleri Almanya, Çin, ABD ve Meksika'ya yayılıyor ve bazen bant genişliği bir yerden diğerine o kadar da büyük değil.

BT ile konuşarak, coğrafi olarak dağıtılmış perspektiften işlerin düzgün çalışmasını sağlamanın bir yolunu aramaya başladık, böylece herkes hangi repo sunucusunun gerçeğin kaynağı olduğunu belirlemeden (yani şeffaf bir şekilde çoğaltarak ).

Belki de itme öncesi ve çekme öncesi kancalarla DNS mekanizmasını taklit edebileceğimizi düşündüm . Örneğin, A, B ve C ülkelerini düşünün. A kutsanmasından çekildikten sonra, A'nın kendisi B'den gelen değişiklikleri çeker, bu da C'deki değişiklikler için çeker. B ve C'nin yeni değişiklikleri varsa, A'ya düşer. Tersine, bir itme olduğunda, tüm mübarek depolara yayılabilir.

Genel olarak sadece bir mübarek repoya sahip olduğunuzu biliyorum, ancak bu küresel olarak ölçeklenmeyebilir ve her mübarek depo sadece tek bir ülkeden ekipler için geçerli olacaktır.

Benim sorum : DVCS repo çoğaltma anlayışı pratikte kullanılan bir şey mi ?, kimse başarılı bir şekilde yaptı mı? Eğer öyleyse, bunu yapmanın doğru yolu nedir?


Dağıtılmış sürüm denetimini kullanan dağıtılmış ekip üyeleri var mı?
dukeofgaming

Şirket politikalarına bağlı olarak, Github veya Bitbucket'te barındırma gerçekten iyi çalışabilir. Global olarak erişilebilir kurulumlara makul bir fiyata sahip şirketler olduğunda karmaşık bir BT çözümü kurmak için bir atık gibi görünüyor.
captncraig

1
"Şirket politikalarına bağlı olarak" <--- yup
dukeofgaming

Yanıtlar:


11

Bu soru şeffaf çoğaltmayı soruyor ve sanırım henüz hiç yanıt yok çünkü insanlar şeffaflığa kapılıyor olabilir. Çoğaltmaya odaklanmak için şeffaflığı bir kenara bırakma özgürlüğünü alacağım. Daha sonra şeffaflıkla başa çıkacağım (veya incelikle) ve aslında bir DVCS'de bunların hepsi bu kadar önemli olduğunu düşünmüyorum.

İlk olarak, depoların bir DVCS'de çalışma şekli hakkında birkaç önemli noktadan bahsedeyim. (Mercurial'ı en iyi biliyorum, bu yüzden örnekler için kullanacağım, ancak söylediğim her şeyin git için de doğru olduğuna inanıyorum.)

A. Bir DVCS'de, herhangi bir klon orijinal ile aynı dosya içeriğini ve geçmişini içerir.

Depoları düzgün bir şekilde senkronize tutmanızı sağlamak, bir çoğaltma sistemi oluşturmak için sıradan DVCS değişiklik yayma işlemlerini (klon, itme, çekme) ve sıradan depoları kullanabileceğiniz anlamına gelir.

B. Yeni değişikliklerin geldikleri yere yayılması gerekmez.

Özellikle, belirli bir repodan değişiklik alıp kendi değişikliklerimi ekleseydim, değişikliklerimin o repoya geri dönmesi gerekmez. Başka bir yere gidebilirler. Bunun faydası aşağıda göstereceğim örneklerden anlaşılmalıdır.

C. Değişiklikler itme veya çekme ile çoğaltılabilir.

Merkezi bir sistemde, yeni değişiklikler hemen hemen (sadece sanırım) repoya itilebilir. Bir DVCS'de, bazıları sadece çekmeyi içeren çeşitli değişiklik yayılım topolojileri ayarlamak mümkündür. Bu, kurulumda daha fazla esneklik sağlar.

Örnekler

Tartışma uğruna, dağıtılmış takımlarınızın duke.de, duke.us, duke.cn ve duke.mx alanlarındaki sistemleri kullandığını ve duke.de'nin "kutsanmış" repoya sahip olmak istediğimiz yer olduğunu varsayalım. Bu varsayımlar göz önüne alındığında, yukarıdaki üç temel DVCS noktasını göz önünde bulundurarak, ayarlayabileceğiniz farklı topolojilerden birkaç örnek vereyim.

0. Merkezi İtme Modeli

Hg.duke.de adresinde tek bir repo var ve tüm konumlardaki geliştiricilerin klonlayıp buradan çekip değişiklikleri buraya itmelerini sağlayın. Bu, Almanya'daki insanlar için işe yarayabilir, ancak muhtemelen dünyanın geri kalanındaki insanlar için bir sorun olacaktır. Tüm klonlama, çekme ve gönderme işlemleri yavaş uzun mesafeli ağ bağlantılarından geçer. Bu, merkezi bir sistem gibi bir DVCS kullanıyor. Bu çözmeye çalıştığınız problem.

1. Çoğaltma ile Merkezi İtme

Hg.duke.de adresinde mübarek repo ve hg.duke.cn, hg.duke.mx ve hg.duke.us adreslerinde kopyalar edinin. Geliştiriciler yerel kopyalarından kopyalar ve değişiklikleri hg.duke.de adresine gönderir. Hg.duke.de dosyasında yeni değişiklikler göründüğünde, bunları çoğaltmalara geçiren bir kanca çalışır. Kopyalar başka türlü salt okunurdur, bu nedenle hiçbir zaman birleşme veya çakışma olmaz.

Örneğin, Meksika'da bir geliştiriciysem, hg.duke.mx dosyasından klonlayacağım, ancak değişiklikleri hg.duke.de adresine göndereceğim. Değişikliklerimi itmeden önce diğer değişiklikler hg.duke.de içine itilirse, push'um engellenir. Diğer değişiklikler hg.duke.mx dosyasına çoğaltılacaktır, bu nedenle bu değişiklikleri yerel olarak çekeceğim, birleştireceğim ve sonra tekrar hg.duke.de adresine zorlamaya çalışacağım.

Büyük klon operasyonlarının tümü yerel olarak yapıldığından, bu bazı avantajlar sağlamalıdır. Merkezi bir repoya başka bir yerde itmek çok kötü olmayabilir, çünkü değişiklikler nispeten nadiren itilir, artımlı değişiklikler genellikle oldukça küçüktür. (Özellikle Mercurial, esasen tüm dosyaları ve geçmişlerini değil, sıkıştırılmış farkları gönderir.)

Mercurial'ta, bir konumdan çekmek ve .hg/hgrcdosyaya aşağıdakine benzer bir şey koyarak başka bir konum oluşturmak için yerel bir repo oluşturabilirsiniz :

[paths]
default = ssh://hg.duke.mx
default-push = ssh://hg.duke.de

2. Basit Çekme Modeli

Mübarek repo olarak hg.duke.de ve diğer kopyalar olarak devam ederek, itme yerine çekme yoluyla değişiklikleri yayabiliriz. Geliştiriciler her zamanki gibi yerel kopyalarından klonlar ve çekerler. Bir değişiklik hazır olduğunda, geliştirici, geliştiricinin deposundan hg.duke.de adresine gelen bazı merkezi hizmete bir çekme isteği gönderir. Birleşme için bir politika oluşturulması gerekecektir. Örneğin, birleştirme çakışmaları varsa, istek reddedilebilir ve geliştiricinin çekme isteğini almasını (yerel kopyadan), birleştirmesini ve yeniden göndermesini gerektirir.

Bu yaklaşım, değişiklikler yayılırken geliştiriciyi bekletmeme avantajına sahiptir. Elbette, geliştirici çekme talebinin gerçekleştirilmesini beklemek zorundadır, ancak en azından bu süre zarfında ek değişiklikler üzerinde çalışabilir.

Varyasyonlar

Uygulanabilecek bir sürü varyasyon vardır.

Bir çekme isteğinin sunulması kod incelemesi için mükemmel bir zamandır. Değişiklikler herkesin erişimine açık olduğu için yayınlandı, ancak kutsanmış repoya henüz entegre edilmedi.

Çekme istekleri manuel olarak veya bazı otomatik sistemlerde gerçekleştirilebilir. Bir çekme isteğinin işlenmesi, değişiklikleri doğrudan kutsanmış repoya değil, bir oluşturma ve test döngüsünün yapıldığı geçici bir hazırlama alanına birleştirebilir. Ancak tüm testler geçtikten sonra değişiklikler kutsanmış repoya entegre edilecekti.

Bir itme modeliyle daha rahat olanlar, her yerde, çoğaltmanın yanında, örneğin hg-stage.duke.mx, hg-stage.duke.cn, vb. bununla birlikte, geliştiriciler sadece diğer yerel değişikliklerle birleşmekle kalmaz, aynı zamanda evreleme depolarındaki değişiklikleri kutsanmış repoya birleştirmekten de birileri sorumlu olmalıdır. Bu doğru koşullar altında çalışabilir ve otomasyona yardımcı olabilir.

"Şeffaflık"

Şimdi şeffaf çoğaltma konusuna.

Yukarıdaki senaryolar göz önüne alındığında, şeffaf çoğaltma ihtiyacını gerçekten görmüyorum. Tüm depolar herkes tarafından görülebilir ve yerel kopyadan çekme / klonlama ve kutsanmış bir repoya veya yerel bir sahneleme alanına itme kuralları vardır.

Şeffaflık istiyorsanız, kişilerin konumlarına göre DNS arama alan adları ayarlamasını sağlayabilirsiniz. Yerel çoğaltma ve hazırlama depolarına basitçe "hg" ve "hg-stage" denir ve DNS kurulumu bunları Çin'deki geliştiriciler için hg.duke.cn ve hg-stage.duke.cn olarak ve buna karşılık olarak diğer yerlerdeki geliştiriciler. Ama bu biraz sihir ve kafa karıştırıcı olabilir ve gerçekten çok şey kattığını düşünmüyorum.

Umarım bu soruya cevap verir. Yanıtla ilgili birtakım özgürlükler aldım, ama bana öyle geliyor ki, yukarıda tarif ettiğim teknikler kullanılarak durumunuz düzeltilebilir.


1
Depoları kutsanmış olanın etrafında sahneleme fikrini seviyorum. Bir entegratör, örneğin ABD'den gelse bile, her ülkeye bakmak küresel proje entegratörü olarak onun sorumluluğu olacaktır. Şeffaf bir şey olmayabilir ... ama bir iş akışını daha net bir şekilde yansıtıyorlar, aynı zamanda bu, her ülkeye istikrarsızlık katan diğer ülkeler hakkında endişelenmek zorunda kalmayacakları için bağımsızlık verebilir. onların şeyler.
dukeofgaming

1
SE izin verir sonra size ekstra bir ödül verecek (24 saat), harika cevap
dukeofgaming

1
Yerel sahneleme depolarında ... değişiklikler kararlı olana kadar yerel olarak tutulursa ve ancak daha sonra ana repoya entegre edilirse, bu farklı takımlar arasında yayılma gecikmesini artırır. Bu, günler veya haftalar sonraya kadar değişiklikler arasında kötü bir etkileşimin yakalanmamasıyla sonuçlanabilir ve bu da teşhisi zorlaştırır. Artan gelişim yoluyla geçici istikrarsızlıktan kaçınmanızı ve herkesi olabildiğince çabuk herkesin (istikrarlı) değişikliklerine maruz bırakmanızı öneririm.
Stuart Marks
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.