Kaynak kontrolünde ne sıklıkla değişiklik yapılır? [kapalı]


204

Kaynak kontrolünde ne sıklıkla değişiklik yapmalıyım? Her küçük özellikten sonra mı, yoksa yalnızca büyük özellikler için mi?

Bir proje üzerinde çalışıyorum ve uygulamak için uzun vadeli bir özelliğim var. Şu anda, her iş parçasından sonra taahhüt ediyorum, yani uygulanan her alt özellik ve hata düzeltildi. Bir hata keşfettikten sonra bazı özellikler için yeni bir test grubu ekledikten sonra bile taahhüt ediyorum.

Ancak, bu modelden endişeliyim. Verimli bir iş gününde 10 taahhütte bulunabilirim. Subversion kullandığım göz önüne alındığında, bu taahhütler tüm depoyu etkiler, bu yüzden gerçekten çok fazla yapmak için iyi bir uygulama olup olmadığını merak ediyorum?


1
Dostum, bu soru görüşe dayalı değildir ve doğru cevabı olan tamamen geçerli bir sorudur. Taahhüt bir tür önemli beceridir, fikir açıklayıcı tamamlama mesajları da dahil olmak üzere kod tabanınıza eklediğiniz çalışan ve kararlı bir geliştirme / özellik / hotFix uygulamanız gerektiğidir. Günün sonunda ve ayrılmak istiyorsanız, sadece kırık bir kod işleyemezsiniz ve yarın düzeltecağınızı söyleyemezsiniz, çünkü önemli taahhüdü ve mesajları tutmak ve gereksiz kodları ezmek için birleştirme ile birlikte rebase kullanmak daha iyidir. sadece geçici bir durumu korumak istiyorsun git stash kullanmalısın
Eric

Belirsizlikten kaçınmak için, bazı özel durumlarda, bitmemiş bir kodu taahhüt etmeniz ve zorlamanız gerekiyorsa, geri döndükten ve bu şubeye tekrar devam etmek istedikten sonra, işi tamamlamadığınızda, önceki tamamlanmamış taahhüdü değiştirip ardından itmeniz gerekir. çalışma ağacınızı retrospeksiyonlar için nasıl temiz ve yararlı tutacağınıza tamamen bağlıdır, ancak çok gizli veya ince hataları veya zayıf işlevsellikleri bulup çözme konusunda inanın ya da inanmayın, eğer temiz ve profesyonel çalışma ağacınız varsa, git hata ayıklama araçlarını kullanmak istiyorum - git blame or git bisect
Eric

Yanıtlar:


196

Her zaman ben giriş derler ve çalışır kod "tam düşünce" tamamlayın. Bu genellikle 15-60 dakika arasında bir yerde olur. Bazen daha uzun olabilir, ama ben her zaman hata durumunda yeniden yazmak istemem çok fazla kod değişiklikleri varsa kontrol etmeye çalışın. Ayrıca genellikle kodumu derler ve eve gitmeden önce iş günü sonunda check-in emin olun.

"Çok fazla" taahhüt / check-in yapma konusunda endişe olmaz. Bir şeyi yeniden yazmanız gerektiğinde gerçekten berbat ve her ihtimale karşı küçük artışlarla geri dönebilmek güzel.


3
Yapıyı böyle bir yaklaşımla kırma olasılığı dramatik bir şekilde artar. Check-in'inizi doğrulayan otomasyon testleriniz yoksa dikkatli olun; insanlar onları engellediğiniz için kapınızı çalıyor olacaklar.
Alex Weinstein

57
Dağıtılmış bir sürüm kontrol sistemi kullanırsanız, yapıyı böyle bir yaklaşımla kırma olasılığı artmaz.
skiphoppy

24
İnşa molalarının sayısı daha sık taahhütlerle artarken, kırılmaları düzeltmek için gereken süre azalır ve geri alma taahhütlerinden kaybedilen zaman da artar. Sık yapılan taahhütler başka birçok faydaya da yol açar. Eğer yapıyı kırarsam, çabucak düzeltebilmem için yakında ve küçük bir taahhütle kırmayı umarım
jyoungdev

26
Ve eğer 2 hafta değerinde bir iş yapıyorsanız, hangi kod parçasının yapıyı bozduğunu görmek için büyük bir taahhütte bulunmak istemezsiniz. Sık yapılan işlemler, yalnızca biraz kodun değiştiğini bildiğiniz için, sorunları çok daha küçük bir kod tabanına ayırmanıza olanak tanır.
Steven Sproat

1
@MikeJ Bu, Kaynak Denetimi'ni nasıl kullandığınıza bağlıdır. Ayrıca, Git gibi bir şey kullanıyorsanız ve kendi Şubenizde çalışıyorsanız, diğer ekip üyeleri için Oluştur'u veya hatta CI / CD boru hattını etkilemezsiniz.
Chris Pietschmann

82

"Taahhütlerinizin tüm havuzu etkilediğinden" endişe duyduğunuzda --- tüm deponun revizyon numarasının arttığından mı bahsediyorsunuz? Subversion'ın saklamak için kaç bit kullandığını bilmiyorum, ancak revizyon numaralarının tükenmeyeceğinden eminim! Birçok taahhüt sorun değil. Yandaki adamdan on kat daha fazla taahhütte bulunabilirsiniz ve karbon ayak izinizi hiç artırmayacaksınız.

Yaptığı iş için tek bir işlev veya yöntem adlandırılmalıdır ve ad çok uzunsa, çok fazla şey yapıyor demektir. Check-in'lere aynı kuralı uygulamaya çalışıyorum: check-in yorumu, değişikliğin tam olarak ne yaptığını açıklamalı ve yorum çok uzunsa, muhtemelen bir kerede çok fazla değişiyorum.


1
İfadeni beğendim. On kez sık sık taahhütte bulunursanız, hiç bir sorun olmayacaktır (ancak yaptığınız sürelerin 1 / 10'unu yaparsanız muhtemelen olacaktır).
Camilo Martin


24

Şahsen bitmiş / kararlı / derleyen her mantıksal kod grubunu taahhüt ediyorum ve o gün ne yaptığımı taahhüt etmeden günü terk etmemeye çalışıyorum.


20

Büyük değişiklikler yapıyorsanız ve kod üzerinde çalışan diğer kişileri etkilemekten endişe ediyorsanız, yeni bir şube oluşturabilir ve değişiklikleriniz tamamlandıktan sonra bagajda yeniden birleşebilirsiniz.


12

Her işim bittiğinde taahhüt ederim. Bu genellikle 1 saat 30 dakika sürer.


12

Sürüm kontrol yorumunuz bir veya iki cümleden uzunsa, muhtemelen yeterince sık işlem yapmıyorsunuzdur.


7
Ve eğer daha azsa, muhtemelen doğru yorum yapmıyorsunuzdur.
JD Isaacks

11

Açık kaynaklı mantrayı takip ediyorum (başka kelimelerle yazılmış) - erken taahhütte bulun, sık sık taahhütte bulun.

Temel olarak, ne zaman düşünürsem, diğer ekip üyelerine sorun yaşamadan yararlı işlevsellik (küçük de olsa) ekledim.

Bu kesinleştirme stratejisi, sorunların erken tespit edilmesini sağlayarak diğer geliştirme çabalarına karşı entegrasyon testine izin verdiği için sürekli entegrasyon ortamlarında özellikle yararlıdır.


10

Aslında işe yaramayan bir kod işlemeyin. Deponuzu yedekleme çözümü olarak kullanmayın.

Bunun yerine, eksik kodunuzu yerel olarak otomatik bir şekilde yedekleyin. Time Machine benimle ilgileniyor ve diğer platformlar için birçok ücretsiz program var.


25
Veya bir şube oluşturun. Bunun için oradalar.
Brian Carlton

2
Sürüm kontrolü, verilerin kaybolmasını veya yedeklenmesini önlemeyi amaçlamaktadır. Ancak aynı zamanda bir geri dönüşüm kutusu olması da amaçlanmamıştır. Yalnızca derleyen kodlar işlenmelidir, ancak taahhütte bulunmak için özelliğin tam olması gerekmez.
jmort253

8

Kullandığım başparmak kuralı, teslim edilen dosya grubunun tek bir check-in yorumu tarafından ele alınabilmesi durumunda check-intir.

Bu genellikle check-in'lerin atomik olmasını ve yorumların diğer geliştiriciler tarafından kolayca sindirilebilmesini sağlamak içindir.

Değişiklikleriniz, uygulama kapsamı geniş olan bir yapılandırma dosyasını (yay içeriği dosyası veya struts yapılandırma dosyası gibi) etkilediğinde özellikle doğrudur. Giriş yapmadan önce birkaç değişiklik 'grubu' yaparsanız, bunların etkileri yapılandırma dosyasında çakışarak 2 grubun birbiriyle birleşmesine neden olur.


7

Ne sıklıkta endişelenmeniz gerektiğini düşünmüyorum. Burada önemli olan ne, ne zaman ve neden. Her 3 saatte bir veya 24 saatte bir taahhütte bulunmanız gerektiğini söylemek gerçekten mantıklı değil. Taahhüt edecek bir şeyiniz varsa taahhüt edin, yoksa yapmayın.

İşte sürüm kontrolü için önerilen en iyi uygulamalardan bir alıntı :

[...] Bir projede aynı anda birçok değişiklik yapıyorsanız, bunları mantıksal bölümlere ayırın ve birden fazla oturumda gerçekleştirin. Bu, bireysel değişikliklerin geçmişini izlemeyi çok daha kolay hale getirir, bu da daha sonra hataları bulmaya ve düzeltmeye çalışırken size çok zaman kazandıracaktır. Örneğin, A, B ve C özelliğini uyguluyorsanız ve hata 1, 2 ve 3'ü düzeltiyorsanız, bu, her özellik için bir tane ve her hata için bir tane olmak üzere toplam en az altı taahhütle sonuçlanmalıdır. Büyük bir özellik üzerinde çalışıyorsanız veya kapsamlı bir yeniden düzenleme yapıyorsanız, çalışmanızı daha küçük parçalara ayırmayı düşünün ve her parça tamamlandıktan sonra bir taahhütte bulunun. Ayrıca, birden çok mantıksal modülde bağımsız değişiklikler uygularken, daha büyük bir değişikliğin parçası olsalar bile, her modülde ayrı ayrı değişiklikler yapın.

İdeal olarak, sabit diskinizde taahhüt edilmemiş değişikliklerle ofisinizden asla ayrılmamalısınız. Değişikliklerin diğer insanları etkileyeceği projeler üzerinde çalışıyorsanız, değişikliklerinizi uygulamak için bir şube kullanmayı düşünün ve işiniz bittiğinde bunları bagajda birleştirin. Diğer projelerin ve dolayısıyla diğer insanların da bağlı olduğu kütüphanelerde veya projelerde değişiklik yaparken, derlenmeyecek kodlar yaparak yapılarını kırmamaya dikkat edin. Bununla birlikte, derlenmeyen kodlara sahip olmak, işlemeyi önlemek için bir mazeret değildir. Bunun yerine dalları kullanın. [...]


6

Mevcut düzeniniz mantıklı. Bu kaynak denetimini nasıl kullandığınızı aklınızda bulundurun : ya geri dönmeniz gerekiyorsa ya da bir fark yapmak istiyorsanız? Açıkladığınız parçalar bu durumlarda tam olarak doğru diferansiyel gibi görünüyor: fark, hata # uygulamasında (check-in günlüğünde belirtilen) tam olarak neyin değiştiğini veya bir özelliği uygulamak için yeni kodun tam olarak ne olduğunu gösterecektir. Geri alma da benzer şekilde her seferinde sadece bir şeye dokunacaktır.


6

Ayrıca, genellikle günde birkaç kez olan bir iş parçasını bitirdikten sonra da taahhüt etmeyi seviyorum. Bence küçük taahhütlerde neler olduğunu görmek büyük olanlardan daha kolay. Çok fazla işlemden endişe ediyorsanız, bir şube oluşturmayı ve tüm özellik bittiğinde onu gövdeye geri birleştirmeyi düşünebilirsiniz.

İşte ilgili bir blog yazısı: Kodlama Korkusu: Erken Giriş Yap, Sıklıkla Giriş


Takip etmeyi kolaylaştırmak için daha küçük taahhütler hakkında + 1'leyin. CVS taahhüdünde uzun bir paragraftan daha kötü bir şey yoktur. Gözlerini ve başını acıtıyor.
jmort253

4

Diğerlerinin de belirttiği gibi, diğer geliştiricilerin yoluna girmeyecek kadar "tam" olan bir mantıksal yığın oluşturmaya çalışın (örn. Otomatik testler oluşturur ve geçer).

Her geliştirici ekip / şirket, her bir şube için "yeterli" olanı tanımlamalıdır. Örneğin, yalnızca kodun oluşturulmasını gerektiren özellik dallarına, otomatikleştirilmiş testleri geçmek için kod gerektiren bir Bagaj'a ve bir şeyin KG testinden geçtiğini belirten etiketlere veya benzeri bir şeye sahip olabilirsiniz.

Bunun takip edilmesi iyi bir model olduğunu söylemiyorum; Sadece "nasıl" yapıldığının ekibinizin / şirketinizin politikalarına bağlı olduğunu belirtiyorum.


3

Bunu düşündüğünüz an.

(check-in yaptığınız güvenli olduğu sürece)


3

Kaynak kodu sisteminize ve başka nelerin yerinde olduğuna bağlıdır. Git kullanıyorsanız, bir adımı bitirdiğinizde işlem yapın. SVN kullanıyorum ve bütün bir özelliği bitirdiğimde işlem yapmayı seviyorum, bu yüzden her bir ila beş saatte bir. CVS kullanıyor olsaydım aynı şeyi yapardım.


3

Ben birkaç cevap katılıyorum: derlemeyecek kodu kontrol etmeyin; Endişeniz kodun "yedeğine" veya değişikliklerine sahipse kişisel bir şube veya depo kullanın; mantıksal birimlerin ne zaman tamamlandığını kontrol edin.

Ekleyeceğim diğer bir şey, ortamınıza bağlı olarak, check-in ücretinin zamana göre değişebileceğidir. Örneğin, bir bileşenin her bir fonksiyonel parçası tamamlandıktan sonra kontrol edilen bir projenin başlangıcında hem güvenlik hem de revizyon geçmişine sahip olmak mantıklıdır. Projenin ilerleyen bölümlerinde ise, özellikle entegrasyon geliştirme / test sırasında, tamamen işlevselliği daha da önem kazanmaktadır. Yarım entegrasyon veya yarım düzeltme kimseye yardımcı olmaz.

Her hata düzeltme sonra kontrol gelince: düzeltme önemsiz sürece, kesinlikle! Hiçbir şey, bir kontrolün üç düzeltme içerdiğini ve birinin geri alınması gerektiğini bulmaktan daha acı verici değildir. Çoğu zaman, bu durumda geliştirici bir alanda üç hata düzeltti ve hangi değişikliğin hangi hata düzeltmesine kabus olduğunu çözüyor.


3

Ayrıca düzenli olarak check-in yapmak istiyorum. Hedefime doğru her adımı attığımda.

Bu genellikle birkaç saatte bir yapılır .

Zorluğum, bu kadar çok kod incelemesi yapmak isteyen ve istekli birini bulmak .

Şirket politikamız, herhangi bir şeyi kontrol edebilmemiz için bir kod incelemesine ihtiyacımız olmasıdır, bu da mantıklıdır, ancak departmanda her zaman hemen bir kod incelemesi yapmak için zamanı olan biri yoktur. Olası çözümler:

  1. Check-in başına daha fazla çalışma; daha az checkin == daha az yorum.
  2. Şirket iade politikasını değiştirin. Biraz yeniden düzenleme yaptım ve ünite testleri yeşil renkteyse, belki kuralı gevşetebilir miyim?
  3. Birisi incelemeyi gerçekleştirip çalışmaya devam edene kadar değişikliği rafa alın. İnceleyici kodunuzu beğenmezse ve yeniden tasarlamanız gerekiyorsa bu sorunlu olabilir. Değişiklikleri 'kaldırarak' bir görevin farklı aşamalarında hokkabazlık yapmak dağınık hale gelebilir.

8
Bir şirketin checkin'leri gözden geçirme politikası akıllıca olmakla birlikte hızlı yedekleme checkin'leri ile uyumlu değildir. Bu amaçla, bir şubede çalışmak ve gözden geçirmek zorunda kalmadan orada check-in yapmak mantıklı olduğunu düşünüyorum ve sadece kod incelemesi ile, gövde ile birleştirerek resmi
checkin yapmak

@ Eli- Katılıyorum, bir şube kullanmak en iyi fikir gibi görünüyor. Bunu şirketimizde yapardık ama sonra durduk. Sorunun tam olarak ne olduğunu hatırlayamıyorum - ancak sürüm ve dağıtım süreçlerini idare eden adam için çok karmaşıklaştığını ve çok karmaşık olduğunu düşünüyorum.
GarethOwen

Aynen Eli. Başka bir seçenek, yayınlanmadan önce veya başka bir kilometre taşını gözden geçirmektir. Sürüm kontrolündeki her iade / taahhüt gözden geçirme korkunç . O kadar korkunç ki, "ana" veri havuzuna teslim olana kadar sadece bir yerde işlemek için yerel bir depo kurarım. (Bunu daha önce CVCS sunucusu kullanılamadığında
yaptım

2

Temiz bir şekilde derlendiği ve birim testlerde gerileme olmadığı sürece her 30-60 dakikada bir değişiklikler yapmayı seviyorum.


2

Peki, istediğiniz kadar taahhüt edebileceğiniz kendi şubeniz olabilir ve özelliğinizle işiniz bittiğinde, ana gövdeye birleştirebilirsiniz.

Taahhütlerin sıklığı üzerine, bu şekilde düşünüyorum, sabit diskim çökerse ve bir şey yapmasaydım bana ne kadar acı olurdu - benim için bir şeyin kuantumu yaklaşık 2 saatlik çalışmadır.

Tabii ki, asla derlenmeyen bir şey yapmam.


o zaman sadece 2 saat acı olur .. değil mi? bu neden bu kadar kötü?
Kevin Conner


2

İşlem başına belirli bir zaman sınırım yok, bir test geçtikten sonra işlem yapma eğilimindeyim ve koddan memnunum. Derleme yapmayan ya da başarısızlık durumunda geri dönme konusunda iyi hissetmeyeceğim bir durumda olan kod taahhüt etmem


2

Bir yandan güvenlik ve geri kazanılabilirlik arasındaki uzlaşmayı, diğer yandan da tüm proje için değişim kolaylığını dengelemelisiniz.

Kullandığım en iyi şemanın bu soruya iki cevabı vardı.

2 adet tamamen ayrı depo kullandık: biri proje geneli depo, diğeri kendi kişisel havuzumuzdu (o sırada rcs kullanıyorduk).

Kişisel dosyalarımızı düzenli olarak, açık dosyalarınızı her kaydettiğinizde kontrol ederiz. Bu nedenle kişisel depo temelde büyük, uzun menzilli bir geri alma tamponuydu.

Derlediğimiz, tamamlandığı test edilen ve genel kullanıma hazır olduğu kabul edilen bir kod parçasına sahip olduktan sonra proje deposuna kontrol edildi.

Ne yazık ki bu sistem, uygulanabilir olması için farklı VCS teknolojilerinin kullanımına dayanıyordu. Aynı tipte iki VCS kullanırken aynı sonuçları elde etmek için tatmin edici bir yöntem bulamadım (örn. İki yıkım deposu)

Bununla birlikte, bir yıkım deposunda "kişisel" geliştirme dalları oluşturarak - şubeyi düzenli olarak kontrol ederek ve ardından tamamlandıktan sonra bagajda birleşerek kabul edilebilir sonuçlar elde ettim.


2

Serbest bırakılmayacak bir dal üzerinde çalışıyorsanız, taahhüt her zaman güvenlidir.

Ancak, diğer geliştiricilerle paylaşıyorsanız, çalışmayan kod işlemek biraz can sıkıcı olabilir (özellikle önemli bir yerdeyse). Normalde ben sadece etkili bir şekilde "çalışıyor" kod iş - tam olarak test edilmiş değil, ama aslında derlemek ve hemen başarısız olmadığını tespit ettik.

Entegre bir hata izleyici kullanıyorsanız, iki hatayı düzelttiyseniz ayrı işlemlerin yapılması yararlı olabilir, böylece taahhüt günlüğü doğru hatalara karşı çıkabilir. Ama sonra tekrar, bazen bir kod değişikliği iki hatayı düzeltir, bu yüzden hangisini koymak istediğinizi seçmeniz gerekir (sisteminiz bir kişinin birden fazla hata ile ilişkilendirilmesine izin vermedikçe)


2

Hala 'sık sık taahhüt, erken taahhüt' ifadesine inanıyorum. Mercurial gibi merkezi olmayan VCS'yi tercih ederim ve birkaç şey yapmak ve daha sonra yukarı doğru itmek sorun değil.

Bu gerçekten yaygın bir soru, ama asıl soru şudur: Bitmemiş bir kod işleyebilir misiniz?


1
Sistemin geri kalanından izole edilebilmesi için bitmemiş kodun düzgün bir şekilde yapılandırıldığı sürece işlenebileceğine inanıyorum. Örneğin, Yığın Taşması gibi bir oylama özelliği uyguluyorsanız, kullanıcı arayüzü henüz oluşturulmamışsa kimse orada olmadığını bilemez.
jmort253

2

Çalışır ve bir güncellemede alırlarsa kimseyi berbat etmeyecek bir kodu bitirdiğinizde.

Ve lütfen doğru yorum yaptığınızdan emin olun.

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.