Atom modellemesi için bir versiyonlama sistemi ne anlama gelir?


34

Programcıların SVN'yi CVS'ye göre tercih etmelerinin nedenlerinden biri, eskilerin atomik taahhütlere izin verenleri mi? Ne anlama geliyor ?


Bu birine yardımcı olabilir , ne olduğunu açıklar (örnek olarak git kullanır, ancak diğer
VCS'lere

Yanıtlar:


69

Bu, sürüm kontrol sistemine bir taahhütte bulunduğunuzda, taahhüt etmek istediğiniz her şeyin girdiği veya hiçbir şeyin yapamadığı anlamına gelir.

CVS'de, taahhüt etmeye çalıştığınızda, birkaç dosyada başarılı olmayı taahhüt ettikten sonra birkaç diğerinde başarısız olabilir (çünkü değişmişlerdir). Bu, veri deposunu talihsiz bir durumda bırakır, çünkü taahhüdünüzün yarısı orada değildir ve işleri derleme ya da daha kötü hale getirmeyecekleri bir durumda bırakmanız muhtemeldir. Şimdi acele etmeli ve ne olursa olsun değişiklikleri entegre etmelisiniz, böylece başkalarının güncellenmesi gerekmeden önce diğer dosyaları da işleme koyabilir ve kırılmış değişikliklerinizi alabilirsiniz.

SVN'de bu olmayacak - SVN değiştirdiğiniz her şeyi yerine getirecek veya tüm değişiklik kümesini kaldıramayacaktır. Bu nedenle, depoları sorunları nedeniyle hiçbir zaman kırık bir durumda bırakmazsınız.


9
Bunun önemli bir sonuç, eğer ki kontrol herhangi bir durumda daha sonra sonuç tutarlı bir devlet (örneğin, tabii bir dosyayı işlemek unutmak gibi herhangi bir kullanıcı-hata engelleme) her zaman olduğu: Her şey ya gelen önce taahhüt veya gelen sonra taahhüt ve aradaki hiçbir şey. CVS'de “taahhüdün yarısına kadar” olabilir. SVN davranışı, sürekli entegrasyon gibi şeyler için çok iyidir. CVS sistemleri için, sadece belirli bir check-out kullandıkları "sessiz bir süre" uygulamak için kullanılan sistemler, ödemeden sonra belirli bir saniye / dakika yapıldığında başka bir işlem yapılmadığı takdirde.
Joachim Sauer

2
CVS kullanmayla ilgili karanlık hatıralar bunu okurken beni etkiliyor.
shabunc

9
@Spoike - true, ancak kasıtlı bir hareket. CVS'de problemler kendi hatalarınız olmadan gerçekleşebilir, SVN'de çalışmanız gerekir.
Michael Kohne

3
@DanNeely - CVS bunları birer birer taahhüt eder. Bu yüzden kısmi taahhütler alıyorsunuz - bazı dosyalar geçiyor, sonra (bir çatışmadan dolayı) yapamayacağı birini vurduğunda duruyor. Sanırım, aslında RCS'den büyüyen CVS'nin bir sonucu.
Michael Kohne

4
Ayrıca, CVS'de, bir hataya yol açmasanız ve her şey yolunda olsa bile, daha hızlı bağlantıya sahip birisinin kaynak ağacını, işlem sırasında yarı yolda güncelleyerek tutarsız bir durumda bırakabileceğini unutmayın. (Ve zaman damgalarının da yayılacağı gibi olmasını bekliyorum, böylece ağacı bir taahhüdün ortasına düşen tarih / saat olarak kontrol etmeye çalışmak da benzer sonuçlar
doğuracaktı

15

Bu, örneğin Güle Güle CVS'de açıklanmaktadır . Andy Lester tarafından yazılmış Subverted makalesi :

Subversion'da taahhütte bulunmaya çalışırsam, ancak dosyalardan birinin bir çakışması var veya güncel değil, hiçbir dosya taahhüt etmiyor. CVS'de, ŞİMDİ DOĞRU düzeltmek zorunda olduğunuz yarı bağlı bir dosya grubunuz var.

CVS'nin programcıyı birleştirme işlemini derhal düzeltmeye zorlaması, elde ettiği kadar karşı üretkendir. Bununla karşılaştırıldığında, değişiklikleri geciktirme / iptal etme / dikkatle birleştirme seçeneği önemli bir avantajdır.


SVN'nin CVS'ye göre yukarıdaki makalede açıklanan diğer faydaları şunlardır:

  • Yaptığınız her şeyin yerel sürümleri
     
    cvs diff yapmak istiyorsanız, havuzunuza bağlanabilmeniz gerekir. Ağ bağlantısı yok, fark yok. Subversion, üzerinde çalıştığınız şeyin yerel bozulmamış kopyalarını saklar, bu nedenle svn diff gayet iyi çalışacaktır. Baştan başlamak ister misiniz? svn revert de bağlantısız çalışır.

  • Revizyonların sembolik isimleri
     
    HEAD, CVS'deki bagajın ipucunun adıdır, ancak PVCS günlerinde geri dönebildiğim gibi “-r-1 ″ demek her zaman istedim. CVS ile, düzenlemekte olduğum şey hakkında bir cvs günlüğü yapmalı ve sonra birini çıkarmalıyım. Bu eğlenceli değil. Subversion ile svn diff -r PREV diyebilirim.

  • Gerçek durum bildirimi
     
    CVS'de, sunucudaki bir şeyin daha yeni olup olmadığını görmenin tek yolu güncelleme yapmaktır ve ne olursa olsun çakışmaya neden olmayacağını ummaktır. Svn status komutu ile gerçek durum elde ediyorum, bu yüzden güncelleme yapmadan ÖNCE çakışma olup olmadığını görebiliyorum.

  • Birleştirme çakışmalarının yararlı bir şekilde ele alınması
     
    CVS'de, çakışma varsa, dosyanızda çakışma işaretçileri bulunur. Subversion'da, çakışma belirteçleri alırsınız, orijinal, çakışma öncesi dosyanızın bir kopyasını PLUS, sunucudan gelen sürümü PLUS, başlangıçta düzenlemekte olduğunuz sürümü PLUS ile alırsınız. Ardından, Subversion'a sorunu çözdüğünüzü söylemek için svn dosya isminin.txt çözümünü yapmanız gerekir. Çarpışma belirteçleri ile hala orada hala CVS'ye geri dönmek istemiyorum.


8

Bu, tüm dosyalarda yapılan tüm değişikliklerin tek bir işlemle gerçekleştirildiği anlamına gelir;

Bu, depoda yapılan kısmi düzenlemelerin daha az olası olması anlamına gelir ve bu da yapıların başarısız olmasına neden olur. İnsanların ilgili tüm dosyaları teslim etmeyi unutmasını hala sağlayabilirsiniz, ancak bu sürüm oluşturma sistemiyle ilgili bir sorun olmaktan çok bir süreç sorunudur.


o zaman iyi bir şey değil mi? Aksi takdirde, kısmi bir işlem dosyaların senkronize edilmemesine neden olur.
Geek

2
evet bu iyi bir şey, kısmi taahhütler kötüdür
jk.
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.