Mercurial: Bir şubeyi yeniden adlandırabilir miyim?


205

Şimdi "evreleme" nin çok daha iyi bir anlamsal uyumu olduğu bir "durgunluk" dalımız var. Bunu ele almak için iyi bir strateji nedir?

Yanıtlar:


224

Şubeye güncelleyin stigingve yeni bir dal oluşturun. Sonra eski dalı kapatın.

Özetle:

hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch

1
Bulduğum bunu yapmanın en iyi yolu bu. Dalın kapatılması, başkalarının yanlışlıkla kullanmasını önler çünkü "hg dallarının" çıktısında görünmez. Adını biliyorsanız hala daha sonra erişmenize izin verir.
Gereçler

2
Mercurial kapalı bir dalın adını tekrar kullanmaya izin verir mi? Yani, bir v3 dalınız varsa, yukarıdaki tekniği v4 olarak yeniden adlandırmak ve sonra kapalı bir v3 geride bırakmış olmasına rağmen yeni bir v3 dalını çatallamak için kullanabilir misiniz?
Joshua Goldberg

4
@JoshuaGoldberg, 3noch yanlış. Mercurial , kullanırsanız kapalı bir dalın adını yeniden kullanmanıza izin verir --force. Örneğin: hg branch --force v3. Bu, istediğiniz gibi hg update v3yeni v3şubeye güncelleme ile sonuçlanır .
Gili

2
@ Gili'nin hg help branch ile yaptığı yorumu doğruladı: "
Joshua Goldberg

7
Eğer yakın olursa stigingdallanma önce, bir "gevşek sonu" alamadım
max.mustermann

60

Gelecekteki okuyucular için: Uzantıyla, rebaseaynı üst öğeyle yeni bir dal oluşturabilir stigingve tüm şube geçmişini şu şekilde taşıyabilirsiniz:

hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging

Bu stigingsadece bir ebeveyni olduğunu varsayar . Elbette bunun yerine açık revizyon numaralarını kullanabilirsiniz.

Dal: 1 Not stigingdiğer dalları ile birleştirmeleri içerir, ben düşünüyorum sürece, bu onları koruyacaktır stagingve stigingaynı ana öğeye sahip. Ama kesinlikle tekrar kontrol ederdim.

Not 2: Bu, geçmişi düzenlediğinden, eski dal klonlanan depolardan kaybolmaz ( rebasebelgelere bakın ). Herkes yeniden klonlayamadıkça, büyük bir grup için çok pratik bir çözüm olmayabilir.

Not3 / Düzenleme (@JasonRCoombs'ın izniyle): Artık aşamalar cıvata standart rebaseolduğundan, zaten itilmiş olan değişiklik kümelerini değiştirmeyi reddedecektir. Ya aşamayı taslak haline getirerek (ile hg phases) kandırın ya da eski dalın olduğu yerde kalmasına izin verin ve sadece düzgün adlandırılmış bir kopya yapın (örneğin, `hg rebase --keep 'ile).


Kullanıcıları klonlamaya zorlayabileceğiniz küçük ekipler için +1, iyi bir fikirdir - veya hg convertbunun yerine kullanabilirsiniz .
hochl

5
Mercurial'ın geç sürümlerinde, taşınacak değişiklikler "herkese açık" ise rebase komutu "değiştirilemez değişiklik kümesine yeniden yapılamaz" ile başarısız olur. Ya onları taslak olmaya zorlayın (hg aşamalarıyla) ya --keepda değişiklikleri taşımak yerine kopyalanacak olan rebase komutuna geçin.
Jason R.Combs

At 4. adım: abort: can't rebase immutable changeset 11b1e2b7dc4f. Değişiklik kümelerini başka bir daldan bu alana aşıladığımı unutmayın. Bunun yanı sıra, bölünmüş ve birleşmemiştir.
Mark Jeronimus

@ Mark, yukarıdaki Not 3'e bir göz atın.
alexis

6
Yeni dalda bir değişiklik kümesi yapmak ve daha sonra yeniden temel almak yerine, bunu atlayabilir ve değeriniz .için kullanabilirsiniz --destve rebase yeni dal adını otomatik olarak alacaktır.
weberc2

16

Üzerinde değişiklik kümeleriniz varsa, yeniden adlandırmak için dönüştürme uzantısını bir şube haritasıyla kullanmanız gerekir. Daha sonra herkes yeni repoyu klonlamak veya eski şubeyi soymak zorunda kalacak.


1
Bu ilginç bir çözüm, biraz daha ayrıntı verebilir misiniz?
DrM

15

"Evreleme" adlı yeni bir dal yapın ve diğerini unutun ...


+1 bunu yapardım. Eski değişiklik kümeleri hala eski branche adına sahip olacak, ancak yenileri yeni şube adına sahip olacak.
barjak

6

Bu, geçmişi değiştirir ve yalnızca gelişmiş Mercurial kullanıcıları içindir. Bunun ne anlama geldiğini bilmiyorsanız bunu yapmayın.

Stiging sadece lokal ise, greft ve şerit kombinasyonu ile evrelemeye değiştirebilirsiniz . Stiglemenin birbirinden ayrıldığı ata değişiklik kümesini güncelleyerek başlayın. Evreleme dalını oluşturun ve her bir işlemi stiging'den evrelemeye kadar graft edin. Evreleme şimdi damgalamanın bir kopyası olmalıdır. Son olarak, ilk taahhüdünü soyarak stiging'i yok edin.

hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch

1
Adım 3 için kullanabilirsinizhg graft {first changeset in stiging}..{stiging head}
KCD
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.