2011-01-20 15 views
6

Sadece şu anda Mercurial ile etrafında oynuyorum ve bu bir sorun olarak ortaya asla, ama sadece bir depo oluşturulur ve bazı değişiklikler eklendi. Bir noktada etiketledim, sonra başka bir dalda bir dal yarattım. Hem etiket hem de şube aynı ada sahip. hg update name yaparsam, etiketli sürüme geçer. Şubede revizyon numarası kullanmaktan başka şubeye geçmenin herhangi bir yolu var mı?Mercurial: Bir etiket aynı ada sahipse, adlandırılmış bir şubeye nasıl geçilir?

ne bana bu konuda düşündürdü biz olsaydı otomatik biz sadece bir etiket veya gelen bu ağacın bir dalını ya belirtmek isterim belirli bir revizyon oluşturmak için bazı komut dosyaları yazmak için olduğunu düşünüyorum. Birisi aynı adı bir etikette ve bir şubede kullanmışsa, o zaman senaryoda doğru düzeltmeler yapılarak sorunla karşılaşırdık. Benzersiz olduklarından emin olmak için tek çözüm, örn. Önceden bekleyen şube veya etiket adına göre?

+0

+1. Tam olarak anlattığınız şey bana oldu: Ben bir dal oluşturduğumda bir etiket yarattım, daha sonra etiketi sildim, o zaman benim yap/konuş komutum (dalı bir argüman olarak alır) yanlış şeyi yapmaya başladı. – harpo

cevap

3

Sen hg branches çıktısını ayrıştırma tarafından kolunun ucu revizyonu olsun.

bu durumu (bir şube ve bir etiket, hem adlandırılmış popular) düşünün:

$ hg branches | grep popular | awk -F ':' '{print $2}' 
:

bash benzeri kabukları içinde
$ hg tags 
tip       3:afb4026bfe32 
popular      1:cea974d8cfc4 
$ hg branches 
default      3:afb4026bfe32 
popular      2:aa7ede2bb3f6 

, sen kolunun ucu düzenlemeleri de almak ilepopular

revizyon hg tags kullanarak, benzer işleri etiketi alınıyor.

Şimdi komut söz konusu şube/etiketine güncelleme edebiliyor. İleri düşünme için

+0

Teşekkürler, bu çalışacağım (sadece tam bir eşleşme için grep -w eklemek zorunda). Bunun yerine bash hattının – DaveJohnston

+1

, ayrıca kullanabilirsiniz: '$ hg günlüğünün -b popüler -l 1 --template '{düğümü | kısa} \ n'' :-) –

+0

@ChristopheMuller, bunu bulmak her zaman işe yaramıyor. Mevcut revizyonunuzun tarihinde bu şubeye sahip olmanız gerekmektedir. Bu cevap her iki durumda da işe yararken (cut -d 'yi kullanmama rağmen:' awk' yerine '-f2' :) – harpo

2

Sana bunu yapabileceğini düşünüyorum:

revsets özelliği kullanır
hg update -r "limit(heads(branch(name)),1)" 

(daha yeni Mercurial içinde hg help revsets bakınız).

Ama bunu idi bana sadece baş ve boyun yaklaşık oluşturulduğu kişiyi yenerek etiketi silmek istiyorum.

+0

Çalışmıyor gibi görünüyor. Bu ipucu (varsayılan şubede olan) güncellenir. Çatışmanın olmadığı başka bir şubeye geçersem çalışır. – DaveJohnston

İlgili konular