Ben mercurial'ın dallanmasıyla karıştırılan bir git kullanıcısıyım. Küçük değişiklikleri nasıl izleyebilirim?


32

Git'i daha önce her zaman kullandım, ama python'a katkıda bulunmak istiyorum, bu yüzden şimdi mercurial'ı öğrenmek zorundayım ve onu çok sinir bozucu buluyorum.

Bu yüzden birkaç tane küçük yama yaptım ve onları yerel ticari havuzumdaki taahhütleri olarak izlemek istedim. Anlaşılan , merkürelde dallanmanın üstesinden gelmenin 4 yolu vardır . 1 ve 4 bana tamamen saçma geldi, adlandırılmış dallar ağır görünüyor ve hızlı 1-işlem düzeltmeleri için onları kullanmamam gerektiğini hissediyorum, bu yüzden yer imlerini kullandım.

Şimdi, yamam reddedildi ve yer imi dallarımdan birini depodan kaldırmak istiyorum. Tamam, git'te şubemi zorla silip unuturdum, bu yüzden yer işaretimi siliyorum ve şimdi aşağıdaki sorunlarım var:

  • Kaplumbağa HG ve hg loghala taahhüt ve defaultşube 2 kafa olduğunu göstermektedir . Ve doğru anlarsam, ek eklentiler olmadan hg cinsinden taahhütleri silemezsiniz.

  • Mercurial'ın yalnızca karma değerleri değil, revizyon numaraları da vardır. Kendi taahhütlerimden birkaçını eklediğim için, tüm ana alımlar ana merkez deposundan farklı revizyon numaralarına sahip.

  • Yer imi otomatik olarak en son işleme geçirmeyi seçtikten hg updatesonra yaparım master, ancak bunu TortoiseHG'de yapmanın bir yolunu bulamadım.

Neyi yanlış yapıyorum? Bu normal ve beklenen bir şey midir ve bu konuları görmezden gelmeli miyim? Veya şubelerimle nasıl çalışacağım?

Yanıtlar:


22

Şahsen, senaryonuz için, her biri çekirdek geliştiriciler tarafından kabul edilmesi gereken birden fazla değişiklik üzerinde çalışmadığım sürece, bir şube oluşturmaktan bile rahatsız olmazdım.

Sadece depolarını klonlayın ve üzerinde çalışın, ardından bir talepte bulunun.

Eğer bir dal kullanacak olsaydım, o zaman adlandırılmış dallar kullanırdım. Yer imlerinin olmadığı bu amaç için tasarlandılar. Neden ağır olduğunu düşündüğünü anlamıyorum.

Mercurial, wikilerinde " Ölü Dalları Açmak " için farklı yollar tanımlayan tam bir sayfaya sahiptir . "Klon kullanma" seçeneği gereksinimlerinizi karşılamalıdır.

Daha spesifik sorunlarına cevap vermek için ...

TortoiseHG ve hg log hala taahhüt ve varsayılan branşın 2 başlı olduğunu gösteriyor. Ve eğer doğru anlarsam, ek eklentiler olmadan hg cinsinden taahhütleri silemezsiniz.

Bu, Mercurial ile yeniyken yaptığım bir hataydı. Bu ek eklentilerden korkmayın. Bazıları çok güçlü aletlerdir ve çoğu zaman temel ürüne dahil edilirler. Mercurial böyle işler. Belirli bir görevi gerçekleştirmek için birine ihtiyacınız varsa, alın ve kullanın.

Tarihi yeniden canlandırmak Mercurial dünyasında kötü bir şey olarak kabul edilir, bu nedenle vanilya ürünü Git kullanıcısının her zaman sahip olması gerektiğini düşündüğü her şeye sahip değildir, ancak uygulamayı kullanmak isteyenler için farklı öncelikler bulunan birçok eklenti vardır.

Mercurial'ın yalnızca karma değerleri değil, revizyon numaraları da vardır. Kendi taahhütlerimden birkaçını eklediğim için, tüm ana alımlar ana merkez deposundan farklı revizyon numaralarına sahip.

Revizyon numaraları hakkında endişelenmeyin. Onlar artık bir kolaylık meselesi. Hash kodları repodan repo'ya geçecek önemli tanımlayıcılardır. Revizyon numaraları, konumlar arasında tutarsız. Check out Hg Init iyi açıklama için.

Revizyon numaraları, tek bir repo ile çalışırken yalnızca kullanışlı ve daha akılda kalıcı bir kısayoldur.

Ana yer imi yerimi otomatik olarak en son işlemeye taşımak için çekmeden sonra hg güncellemesini yapıyorum, ancak bunu TortoiseHG'de yapmanın bir yolunu bulamadım.

TortoiseHG kullanırken , diğer aletlerden çok tezgahı kullanın . Her şey (neredeyse) orada. Güncelleme revizyon içerik menülerinde. Her zaman sezgisel değildir , ancak yukarıdaki bağlantıda iyi bir rehber vardır ve buna alıştıkça, kendinden emin bir şekilde vazgeçerek uzaklaşırsın.


Bu argümanlı dalların, düzenleme tarihinin hg
jk

9

Açıkça görülüyor ki, mercurial'da dallanmanın üstesinden gelmenin 4 yolu var. 1 ve 4 bana tamamen saçma görünüyordu, adlandırılmış dalları ağır görünüyor

Mercurial'da şubeler oluşturmazsınız . Her taahhüt etkili bir şekilde daldır, herhangi bir taahhüdün birden fazla ebeveyni ve birden fazla çocuğu olabilir. Yani bunlar aynı varlıkları örgütlemenin dört farklı yolu.

Sen olabilir sen onlara farklı isimler vermek gerekmez , ama iyi bir fikirdir. Adlandırılmış dallar hakkında ağır bir şey yok - bu sadece bazı ekstra meta veriler. Şahsen ben adı verilen şubeleri başka bir durumda tercih ederim.

TortoiseHG ve hg log hala taahhüt ve varsayılan branşın 2 başlı olduğunu gösteriyor.

Her şeyi içine atmak yerine adlandırılmış dalları kullanmanın tam nedeni budur default.

Ve eğer doğru anlarsam, ek eklentiler olmadan hg cinsinden taahhütleri silemezsiniz.

Aslında Mercurial'da hiçbir şeyi silemezsiniz ve yapmamalısınız . Kullanabilirsiniz hg stripancak günlüğe kaydedilmemiş - temelde yerel deponuzun bir bölümünü kesiyorsunuz. Bunu zorlayamazsınız ve yerel olarak çıkardığınız dalın bulunduğu bir depodan çıkarsanız geri gelir.

Mercurial'ın yalnızca karma değerleri değil, revizyon numaraları da vardır. Kendi taahhütlerimden birkaçını eklediğim için, tüm ana alımlar ana merkez deposundan farklı revizyon numaralarına sahip.

Sayılar hiçbir şey ifade etmiyor. Kafan karışırsa onları umursamazsın.

Ana yer imi yerimi otomatik olarak en son işlemeye taşımak için çekmeden sonra hg güncellemesini yapıyorum, ancak bunu TortoiseHG'de yapmanın bir yolunu bulamadım.

Ben tortoisehg kullanmadıysanız ancak hg pull -uher ikisi yapacak pullve update.

Git'i daha önce her zaman kullandım, ama python'a katkıda bulunmak istiyorum, bu yüzden şimdi mercurial'ı öğrenmek zorundayım ve onu çok sinir bozucu buluyorum.

Sorun değil, birçok Mercurial kullanıcı Git (benimle birlikte) hakkında aynı hissediyor.


6

Mercurial ve Git benzer olsalar bile, farklı tasarımlara sahipler, belki de en önemli tasarım farkı, Mercurial modifikasyonunda tarihin git kadar esnek olmamasından kaynaklanıyor (çünkü bu cesareti kırılmış).

Kısa cevap : az miktarda değişiklik yapmanızın bir önemi yoktur, yine de bir şube kullanabilirsiniz. O dal daha sonra kullanmak silme hakkında düşünüyorsun imini Silsen ve böylece şerit sonradan değişiklikler.

İlk önce, bahsettiğiniz bazı şeylere biraz ışık tutmaya çalışıyorum:

  • 1 ve 4, dallanma olarak kabul edilir, çünkü her taahhüt ettiğinizde , teknik olarak bir dal olan adsız bir dal ( etkin bir şekilde kaynağınızda / kutsanmış deponuzda aynı zamanda bir işlem varsa) oluşturursunuz. Yöntem 4'te, yöntem 1'de değilken yeni bir "kafa" oluşturuyorsun . Kafaların birleştirilmesi gerekiyordu. Yöntem 1'in biraz saçma olduğuna katılıyorum ama bazıları hoşuna gidiyor gibi görünüyor ... küçük projeler için sanırım.

  • Metot 2 ile ilgili olarak , dalların ağır olması değil, kalıcı olduklarıdır . Şerit uzatma gibi bir şey kullanmadığınız sürece bir dalı çıkaramazsınız. Yine, Mercurial'ın tasarım felsefesi tarihi değiştirmeye doğru gitmez (ancak bu konuda daha iyi olmuştur).

  • İlgili revizyon numaraları , onlar sadece yerel ve daha insanca okunabilir referanstır Düzeltmeler ile yapmanız gereken tek şey komutları kullanmak için. Karma kullanmak isterseniz, yine de yapabilirsiniz. Revizyon numaraları sadece kısayollardır ve farklı depolar arasındaki dahili işlemler için Mercurial tarafından dikkate alınmaz.

Şimdi, diğer sorularınızı cevaplamak için:

  • Hangi başlıklara sahip olduğunuzu kontrol edebilirsiniz hg heads, tek bir dalda 2+ baş görürseniz birleştirilmeleri tercih edilir. Muhtemelen yer işaretinizin olduğu yer burasıdır .
  • Yaptığın bir revizyondan kurtulmak için yapabilirsin hg rollback, ama sanırım bu durum böyle değil.
  • Bir yer imini silmek için hg bookmark --delete yourbookmark
  • Tarihin dallarını kesmenin kolay olduğu için mutlu olacaksınız. İçine bak Rebase uzantısı ve Şerit operasyonu .
  • Mercurial zaten birkaç uzantıyla birlikte geliyor, ancak varsayılan olarak etkin değiller . Herhangi bir klasöre gidin ve TortoiseHG bağlam menüsünü almak için herhangi bir yere sağ tıklayın, Genel Ayarlar'a gidin ve ardından Uzantılar: MQ uzantısını ve Rebase uzantısını etkinleştirin. Bu, herhangi bir şekilde depolar arasındaki uyumluluğa zarar vermez.
  • Şimdi buradasınız, ya:
    • Yer işaretinizin başladığı yeri işaretleyin (bu muhtemelen sorununuzu giderir)
    • Daha kolay görselleştirme için, belki de değişikliklerinizi önden yeniden yapılandırabilir ve daha sonra bunları soyun. Az önce bahsetmiştim, çünkü başka bir zaman sizin için yararlı bir şey olabilir.

Ayrıca, git'te "özel yerel şubelere" sahip olabilirsiniz çünkü onları açıkça itmeniz gerekir ve daha sonra bunları silebilirsiniz. Mercurial'da sahip olduklarınızı zorlarsınız , ancak bundan kaçınmak istiyorsanız Fazlar özelliğini kullanabilir ve bir dizi revizyonu gizli olarak işaretleyebilirsiniz . Gizli revizyonlar zorlanmaz.

Son olarak, yanlış bir şey yapmıyorsunuz , sadece biraz farklı zihniyetlerle inşa edilmiş farklı araçlar olduklarını aklınızda bulundurun; bunlar, aşağı doğru kaynamaktadır: tarihi değiştirmek (git) veya tarihi değiştirmemek (hg). Mercurial'da, kendinizi (özellikle Fazlarla) tarihi değiştirerek ayağından vurmak daha zordur ve bu yüzden bazıları gitmekten daha çok hoşlanır .


Adlandırılmış bir dalı kaydeden tüm merkezi olmayan değişiklik kopyalarının çalıştırıldıktan sonra silindiğini garanti etmenin bir yolu yoktur hg strip. Sanırım biri, şube adlarının genel bir ad alanına sahip olması ve Git dal adlarının bulunmaması dışında, Ad dallarının ademi merkeziyetçi kopyaları hakkında aynı şeyi tartışabilir. İsim dalları nedeniyle birden fazla kafa var. Merkezi olmayan bir VCS için bulaşıcı bir tasarım hatasıdır.
Shelby Moore III

1

Mercurial ile dalları hakkında endişelenmemek en kolay buluyorum. Sadece tarihin neresinde düzenlemek istediğimi ve istediğim gibi taahhütler oluşturmak istediğimi buluyorum (aka anonim şubeler). Bazen farklı bağlamlarda başların arasına atlamak zorunda kalırsam yer işaretleri yararlı olabilir, ancak çoğu zaman onlarla uğraşmam. Adlandırılmış dallar uzun ömürlü dallar (bug-fix dalları, proje dalları) için uygundur ancak 1- veya 2-taahhütler için iş için doğru araç değildir.

Anonim dallara sahip numara, zorlamak istemiyorsanız, yani yerel tutmak istemeniz durumunda, fazlarını "gizli" olarak ayarlamaktır. Eğer varsa do onları itmek istiyorum, ama bunlara dayanarak artık kaydedilmesini istemiyorum, sadece artık 'kafa' listesi ve cıva görünür anlamına gelir üstlerinde bir "--close-şube" taahhüt bu daldaki birden fazla başkan hakkında şikayet etmeyi bırakacaktır.


-1

Şube yerine basitçe yer imi kullanabileceğimizi düşünüyorum; Ürünü yine de desteklemeye devam edeceğiz ve iki şubeyi uzun vadede birleştirmek büyük bir baş ağrısı olur.

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.