Büyük cıva depoları “itme yarışından” muzdarip mi?


9

Birkaç "DVCS daha iyi" sorusunu programcılarla ilgili birkaç soruya cevap olarak okuyorlar. güncelleme, taahhüt, tekrar eski, taahhüt, hala güncel olmayan vb.

DVCS bunu itme kavramı ile sınırlar. Ancak çok büyük projelerde, özellikle günün sonunda bir "itme yarışı" olmaz mıydı? Git'te bunun her şey için sürekli dallanma ile bir şekilde düzeltildiğini biliyorum, ama Mercurial'da dallamıyorsunuz, yeni bir kafa yaratıyorsunuz.

Gördüğüm sorun

  1. Kullanıcı itmeye çalışıyor
  2. Güncel değil (mercurial yerel repo güncel değilse itmenize izin vermez), bu nedenle yerel değişikliklerinizi çekip birleştirirsiniz
  3. Kullanıcı tekrar itmeye çalışır, ancak başka birini iterek birleştirirken tekrar güncelliğini yitirir
  4. Tekrar çekin ve birleştirin
  5. Hala güncel değil
  6. Tekrar et

Kulağa tanıdık geliyor mu?

Bu çok büyük ve popüler cıva depolarında gerçek bir sorun mu? Herkes günün son baskısını yaptığında şirketin içinde ne olacak?


mercurial'da kim dallanmaz? hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Carson Myers

@Carson Git şubeleri ucuz. Mercurialta çok daha kalıcıdırlar. Genellikle git size şube bir özellik üzerinde çalışmak için duydum, mercurial farklı bir dizine yeni bir kafa veya klon oluşturmak.
TheLQ

Peki --close-branchtaahhütte bir süre ekleyebilirsiniz - ve mercurial dalları adlandırdı, yeni bir dizine klonlamak zorunda değilsiniz
Carson Myers

@Carson Yapamayacağınızı söylemiyorum ya da bunun mümkün olmadığını söylüyorum, sadece her zaman sözleşmenin şube değil klonlamak veya yeni bir kafa yaratmak olduğunu her zaman duyduğumu söylüyorum. Git depolarının bir demet olma eğilimi gösterirken gördüğüm çoğu mercurial depoların sadece birkaç dalı var
TheLQ

Emin değilim, hiç git kullanmadım
Carson Myers

Yanıtlar:


8

DVCS kullanan büyük açık kaynaklı projelerin çoğunun itme yerine "çekme istekleri" kullanması, yani bir kullanıcı projenin şubelerinden çekilmesini talep ediyor ve bu istekleri herhangi bir sırayla üstlenmeyi seçebilir , hiç değilse. Bu, sizin adlandırdığınız gibi "itme yarışı" ihtiyacını ortadan kaldırır.

Diğer şirketlerde işlem için kefil olamıyorum, ancak çalıştığım yerde bu bir sorun değil.

Bakın, bir depo üzerinde çalışırken, tüm deponun bir kolu üzerinde çalışıyorsunuz, böylece push talepleriniz ana bagajın uzak bir versiyonuna gidiyor. (Bitmiş) değişiminizi gövdeye entegre etmek istediğinizde, bagajı yükler, çeker, birleştirir, itersiniz.

Bazen ( çok nadiren) iki kişi bunu aynı anda yapmaya çalışacaktır (bazı iletişimsizlik nedeniyle olağan). Bu durumda kim "kaybederse" sadece yeniden çekmek, birleştirmek, itmek zorunda kalacak. Merkezi bir depoya katılmak için saat 17: 00'de acele etmediğinden, özetlediğiniz sorun gerçekten orada değildir.

DVCS'nin güzelliği budur: dallanma ağrısızdır, bu nedenle herkes kendi dalında çalışabilir.

DÜZENLE

Oh, sadece "Mercurial'ta dallamıyorsun ..." yorumunu fark ettim: Evet, biliyorsun. Yapmanız gerekmiyor, ancak bunu yapmak çok kolay ve bunu yapmanın faydaları ağır basmayacak kadar büyük olduğundan, sadece depoları çok fazla şube haline getirme eğilimindesiniz.


Daima dalda değil, deneysel özellikler üzerinde çalışmak için klonladığınızı duydum. Duyduğum nedenlerin çoğu, cıva dallarında Git'e göre çok daha kalıcı. Ancak yanlış olabilir
TheLQ

Mercurial söz konusu olduğunda, bir klon bir dal olduğu için, standart bir "kafa" (ve biraz daha fazla şey!) İle yapabileceğiniz hemen hemen her şeyi yapabilirsiniz, ancak çekme / gövdeye olan mesafeyi itin. Kalıcılık hakkında ne demek istediğinizden emin değilim, klonunuzu bitirdiğinizde silebilirsiniz.
Ed James

Nasıl olur da 5 pm itme acele yok?
Cem Catikkas

Dediğim gibi, çoğu zaman herkes kendi dalında çalışıyor (başka biriyle tam olarak aynı konu üzerinde çalışmanız pek olası değil), bu yüzden herkes günün sonunda farklı dallara itiyor. Artı, işimde esnek zamanımız var, bu yüzden daha fazla 16:00
Ed James

1

Hayır, itme yarışı yok çünkü konu dallarında iş yapılıyor . Bir birleştirme yöneticisi, dalları bir tümleştirme dalında birleştirmenin (nispeten daha düşük) karmaşıklığını yönetir . Bu genellikle sürekli yapılır. Dağıtık sürüm kontrol iş akışları hakkında daha fazla bilgi için, birinci kaynak atın ağız olacaktır: man gitworkflows, çevrimiçi burada . Mercurial iş akışları yapmak için istem rağmen kullanım dallanma ve teknikleri benzerdir.


OP burada git ve hg hakkında bir ayrım yapıyor ancak cevabınız git'i hedefliyor (örneğin ilk bağlantı çok git yönelimli). Bu doğru bir cevaptır (OP'nin hg'deki dallanmanın orijinal yanlış yorumu, sorunun kendisine yol açtığından), ancak hg için aynı olduğunu belirtmek gerekir.
Ed James

@Ed İyi bir nokta, cevabın hem git hem de mercurial için geçerli olduğunu netleştirmek için güncellendi.
Rein Henrichs

depo git.git'e bakın, DVCS kullanarak birleştirmenin iyi bir örneğidir. Çok sayıda birleştirme noktası var. Sonunda ana dalda birleştirilmeden önce aynı anda 10'dan fazla geçici dal olabilir.
2012'de
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.