Yerel olarak cıvata tutmak istediğiniz küçük değişiklikleri nasıl yönetiyorsunuz?


9

14 yaşındaki bir cvs deposunu (tarih bozulmamış) mercurial'a geçirmeyi düşünüyorum. Sanırım tüm teknik dönüşüm bitlerini aldım, ancak hala cıvatada etkili bir şekilde çalışma hakkında bazı sorularım var.

Bireysel geliştiricilerin cvs sanal alanlarında (kendim dahil) çok şey gördüğüm şeylerden biri, ana hatta itilmeye hazır olmayan yerel taahhüt edilmemiş değişiklikler. Benim anlayışım bunun kötü bir şey olduğu. Hg ile yaptığım deneylerin çoğu, taahhüt edilmemiş değişikliklerin kötü bir şey olduğunu gösteriyor. Onlarla birleşememe bunun için yeterlidir. Yani bilmek istediğim, günlük kodlamada cıva kullanan diğer insanların bununla nasıl başa çıktığıdır. Deponuzu güncelleme zamanı geldiğinde koddaki eksik değişikliklerle nasıl başa çıkıyorsunuz? (Henüz) diğer geliştiricilerle paylaşmak istemediğiniz yerel değişikliklerle nasıl başa çıkıyorsunuz?

Yanıtlar:


5

Ben bu şekilde idare ediyorum:

Yerel veri havuzumda, denesem bile her değişikliği taahhüt ediyorum. Denemede iyiysem ve test edildiyse, uzak depoya iterim. Değilse, yerel depomda kalır (veya daha eski bir düzeltmeye geri döner).

Fikir, uzak deponun sadece projelerimin çalışan, test edilmiş sürümlerini içermesidir.


3
Uzak deponuzun "son işlemde sabit hata" türü taahhütlerle darmadağın olduğunu fark ediyor musunuz?
nmichaels

4

Ekleyeceğim birkaç şey var.

Bunlardan biri, TortoiseHg ile standart olarak gönderilen , rafları mantıklı kullanan bir iş akışı önermektir .

Mevcut çalışma dizinimin bir parçasını işlemek istediğimde, işlemek istemediğim, yeniden derlediğim (şimdi bozuk bir derlemeyle sonuçlanan bitleri rafa atmadığımdan emin olmak için) istemediğim değişiklikleri rafa alırdım ve testlerimi yapardım . Sonra tam, çalışan ve test edilmiş seti taahhüt ediyorum. Sonunda değişiklikleri düzeltmek için unshelve çalışırdım.

Daha doğrusu daha kalıcı değişiklikler olsaydı, o zaman ben hem ile dağıtılmaktadır Mercurial Kuyrukları uzantısını kullanarak içine bakmak istiyorum, ben localhost port 3333 yerine üretim sunucusuna her zaman noktaya benim geliştirme makinede bir yapılandırma dosyasını istedi demek Mercurial ve TortoiseHg .


4

Taahhüt edilmemiş değişikliklerin özünde kötü bir şey olduğuna inanmıyorum. "Onlarla birleştirilememe" ifadesine atıfta bulunuyorsunuz - bazı dosyalarda taahhüt edilmemiş bir değişikliğiniz varsa ve bu dosyadaki bir değişikliği alıp güncellerseniz, Mercurial birleştirme işlemini tıpkı işlemişmişsiniz gibi başlatır, sonra sizden istendiğinde Birleştirme. Farklı bir şey mi demek istediniz?

Dolayısıyla, henüz diğer geliştiricilerle paylaşmak istemediğiniz yerel değişiklikler için iki yaklaşımınız vardır. Birincisi, çalışma kopyanızdaki değişiklikleri tutmak, ancak onları itmemek, diğeri ise çalışma kopyasının dışında bırakmaktır. Hangisini seçtiğiniz, bu değişikliklerin çalışırken kullanılabilir olmasını isteyip istemediğinize bağlıdır.

Bunları çalışma kopyasında tutarsanız, gelen değişiklikler iyi çalışır, bu nedenle yalnızca giden değişiklikler oluşturmaktan kaçınmanız gerekir ve bu, bunları yerine getirmekten kaçınmak anlamına gelir. Dosyalar yeniyse, bu kolay - sadece hg addonları değil . Zaten izleniyorlarsa, bunları özel olarak taahhütlerden hariç tutabilirsiniz hg commit --exclude foo.txt. Hariç tutulacak çok sayıda dosyanız varsa veya bunları birçok işlemden hariç tutacaksanız (örneğin, yerel bir yapılandırma dosyasında kalıcı bir değişiklik için), hariç tutma uzantısına bakın .

Değişiklikleri bir kenara taşımaya hazırsanız, başka seçenekleriniz de vardır. En basit şey, hg diffdosyaları güvenli bir yerde sakladığınız bir yama oluşturmak için dosyaları kullanmak , daha sonra hg patch --no-commitdeğişiklikleri geri almak istediğinizde bu yamayı yeniden uygulamaktır. Raf uzantısını , tavan uzantısını veya başka bir akrabayı kurarak bunu daha pürüzsüz hale getirebilirsiniz . Kuyruk uzantısını da kullanabilirsiniz , ancak bu bir somunu kırmak için balyoz kullanıyor. Hatta değişiklikleri taahhüt edebilir, daha sonra ebeveyne geri güncelleyebilir ve orada başka bir iş yapabilirsiniz, değişiklikleri güdük bir anonim dalda bırakarak - hg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')(elle yapmak daha kolay olabilir!). Ancak, bu değişiklik setini zorlamamaya dikkat etmeniz gerekir.


3

Gelişim akışlarını ayırmak için iki temel yaklaşım kullanılır.

  • Adlandırılmış Şubeler. Fikir şu ki, kendi dalınızda çalışıyorsunuz, nmichaels_branch_of_awesome. Bu şekilde değişikliklerinizi başkalarının işlerini kızartmadan yapabilirsiniz. Daha sonra çalışmalarına ihtiyaç duyduğunuzda diğer insanlardan birleşirsiniz ve özellik için zaman geldiğinde, entegrasyon için daha istikrarlı şubeye doğru itersiniz. Adlandırılmış dalları tercih ederim.

  • Anonim klon. Bu, korumalı alanınız için ayrı bir havuz oluşturur. Burada istediğinizi elde edene kadar oynarsınız, sonra (muhtemelen) taahhütleriniz için bir MQ yaması yapın ve başladığınız yere itin. Dizin yönetimi ve hileli olabilir potansiyel MQ çalışması gerektirdiğinden, bu yaklaşıma düşkün değilim. Ve bazı repo ile, sadece bir elde başlayabilirsiniz küçük Bunun için büyük. Bununla birlikte, bu fırın geliştiricileri tarafından tercih ediliyor gibi görünüyor.


İşi entegrasyon bitlerini yapmak olan biri var gibi görünüyor. İnsanların hemen öğrenmesi gereken yeni şeyler listesine mq eklemek istemiyorum, ancak adlandırılmış dallar fikrine ilk tepkimi düşüneceğim. İyi kurulmuş olmayabilir.
nmichaels

İkinci merminiz için neden klonlama, çalışma ve sadece bitirdiğinizde itme yapmıyorsunuz? MQ burada karmaşık geliyor
TheLQ

@TheLQ: Bu da işe yarıyor, ancak doğrudan temel repodan klonlamaktan farklı değil. MQ, taahhütleri tek bir taahhütte toplar.
Paul Nathan
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.