2011-01-04 20 views
11

Sunucu havuzundan bir çekme işlemi yaptıktan sonra yerel çalışma yanıtımdan bir grup değişiklik ekledim. Yamaların çalıştığından emin olmak için sunucudan yeni bir repo aldım ve değişiklik setini uygulamaya çalıştım. Ne yazık ki, ithalat bu başarısız olur:Mercurial import için bir yama başarısız olduğunda ne yapılmalı?

applying G:\OSS\premake-dev\premake-dev_rev493.patch 
unable to find 'src/host/scripts.c' for patching 
3 out of 3 hunks FAILED -- saving rejects to file src/host/scripts.c.rej 
patching file src/base/api.lua 
patching file src/host/scripts.c 
patching file src/tools/bcc.lua 
file tests/test_bcc.lua already exists 
1 out of 1 hunks FAILED -- saving rejects to file tests/test_bcc.lua.rej 
patching file tests/premake4.lua 
patching file tests/test_bcc.lua 
abort: patch failed to apply 

[command interrupted] 

Ben başarısızlığın nedenini biliyorum, artık son Changeset bulunmayan Kaldırılan kaynak dosyası nedeniyle bu. Ancak yamalarımı nasıl düzelteceğimi bilmiyorum, böylece geçerli sunucu deposuyla temiz bir şekilde uygulanacak.

Mercurial'a oldukça yeni geldim, bu yüzden kullanılan terimlerden bazılarına aşina olmayacağım. Ayrıca Hg sunucu havuzuna yazma erişimim olmadığını da unutmayın. Bu yüzden, benim değişiklik kümemi elde etmek için, onu bir yama olarak dışa aktarmalı ve bunu çalışanlara iletmeliyim.

+1

nasıl kafa ile birleştirme, sonra onu işlemekten, uygulayarak, yama için inşa edildi Changeset geri güncellemeyle ilgili? –

+0

@Lasse öneri için teşekkürler. Bunu bir deneme yapıp geri bildireceğim. Bu, bir yanıt olarak göndermeye değer olabilir, bu nedenle kapsamlı yazma için teşekkürler – greatwolf

cevap

13

Yamaları çok fazla kullanmama konusunda itiraf etmeliyim, bu doğru iş akışı olmayabilir, ama ne denemek isterdim, eğer bu durumda olsaydım, yamayu esas olarak temel aldığı değişiklik kümesine uygulamak oldu.

    +-- you're here 
        | 
        v 
1---2---3---4---5---6 
    \ 
     \ 
     X <-- patch was built to change 2 to X 

Ben ne yapardım, ben yama aslen dayanıyordu changeset biliyorum sağlanan bu Changeset geri güncellemek olacaktır: Aşağıdaki durum var gibi başka deyişle

, bu sesler Yamayı uygulayın, bu başka bir kafa ekleyecektir, daha sonra bunu deponuzun ucuna birleştirin.

bu eylemlerin ardından, depo gibi görünmelidir:

     +-- you're here 
         | 
         v 
1---2---3---4---5---6---8 
    \    /
     \    /
     7-------------/ 
    ^
     | 
     +-- this is the changeset you committed after applying the patch 

Şimdi, farklı bir yol.

Tek yönlü bir yama mu kullanıyor? Mercurial'i kullanmanın en yaygın yollarından biri de, merkezi deponun tam bir klonunu içeren kendi deponuzu, bir çatalı kurmanızdır, ancak erişiminiz var demektir.

Böylece yeni değişikliklerinizi kendi klonunuza dahil edebilirsiniz.

Klonlamadan sonra merkezi depo yeni eklenen değişikliklere sahipse, bir noktada klonunuza çekip birleştirin.

Memnun kaldığınızda, merkezi depodaki bakım görevlilerine bir çek talepte bulunursunuz, “Hey, sizin için bazı değişikliklerim var, bunları klonumdan çekebilirsiniz: http: // ... ".

Bu yolla, onlar için her türlü zor işi yaptıkları için, bakıcıların her şeyi almaları gerçekten çok kolay.

central: 1--2 

clone: 1--2 

Sana, işine ekleyin: Bu böyle iki depoları var anlamına gelir

sen it Sonra

central: 1--2--3--4--5--6 

clone: 1--2--3 

:

central: 1--2 

clone: 1--2--3 

Bazı changesets eklemek :

Sonra birleştirme: sürdürücüler şimdi senden çekersen

central: 1--2--3--4--5--6 

clone: 1--2--4--5--6--7--8 
      \   /
       \  /
       3--------/ 

, onların depoya tam aynı tarih olsun.

Ayrıca, çekme ve birleştirmek zorunda kalmamanız anlamına gelen rebasing için bazı destek de vardır, ancak buradaki değişiklikler "rebase ile çek" komutunu yayınlar, böylece değişiklik setinizi geçerli konumdan yeni bir konuma taşır. onların depoda pozisyon, bu şu şekilde görünecektir: hayır birleştirme çakışma varsa

central: 1--2--3--4--5--6---7 
          ^
clone: 1--2--3   | relocated here 
       |   | 
       +------------+ 

Bu yalnızca çalışacak. Çekip birleştirdiğiniz yöntem onlar için en iyisidir, çünkü tüm zor işleri yaptığınızdan, sadece kodun istedikleri şey olduğunu doğrulamak zorundadırlar.

Forking hakkında daha fazla bilgi için, Tekpub'un CodePlex ve Mercurial'daki videosunu izleyin, burada: , forking parçasının başlaması için saat 21:15 civarında arama yapın.

"Çatal" ın temel olarak sadece bir klon olduğuna dikkat edin, CodePlex'te forking'in çalışması, kendi hesabınızda bir klon oluşturmayı otomatik hale getirmesi ve orijinal bekleyicileri çekme isteğini göndermesini otomatik hale getirmesidir. Bitbucket veya CodePlex'te hesabınızı veya herhangi bir şekilde klonunuzu orada yayınlayın ve yalnızca bakıcılara depo URL'nizle birlikte bir e-posta gönderin.

+0

'u daha kolay hale getirin. Yamayu uygulamadan önce kafamı daha önceki bir sete güncellemek, beni en çok uyandırdı. Video için +1, oldukça yardımcı oldu ve bazı şeyleri daha net hale getirdi. Sanırım bu dövme yöntemini bitbucket'i denemeliyim. – greatwolf

+0

* "Hey, sizin için bazı değişikliklerim var, bunları klonumdan çekebilirsiniz: http: // ...". * Repo'm için bir URL alma işlemi zor mu? Sanırım ana repo açıkken sunucuya yükleyebilirim. – Noumenon

+0

Bir URL'den başka bir yere "çekmek" için, deponuzun barındırıldığı bir yere ihtiyacınız vardır. Bunları yerel olarak "hg service" ile barındırabilirsiniz, ancak muhtemelen yerel IP adresleri, güvenlik duvarları ve bağlantı noktaları vb. Ile uğraşmak zorunda kalırsınız. –

0

Benim durumumda, hg başarısızlığım satır sonları ile ilgili idi. Solüsyon benim ~/.hgrc dosyasında bu koyuyordum:

[patch] 
eol = auto 
+0

Outlook, e-postayla gönderilen ekimden "ekstra" satır sonlarını kaldırmayı seçtiğinde de bana da oldu. Geri yükleme seçeneğinin tıklanması işe yaradı. – Noumenon

İlgili konular