Hg Şubelerinin Kapatılması


103

hg branch FeatureBranchNameGeliştiriciler arasında paylaşılan bir merkezi depoda kullanırken ve yayınlarken FeatureBranchName, geliştirme resmi olarak varsayılan şube ile birleştirildiğinde, sonunda kapatmanın bir yolu var mı?

FeatureBranchNameBir hg brancheskomut yerine getirilirken görünmüyorsa da faydalı olacaktır .

Yanıtlar:


158
hg commit --close-branch

bir dalı yakın işaretlemek için yeterli olmalıdır. (bkz. hg commit)

--close-branch

bir şubeyi şube listesinden gizleyerek kapalı olarak işaretleyin.

Ayrıca bu konuya bakın :

Beklentim, bir şubeyi kapatmam, çünkü bu gelişim çizgisi çıkmaza girdi ve artık onunla uğraşmak istemiyorum.
Bu nedenle, bir dal kapatıldığında, kapalı dalları görmeyi açıkça istemediğim sürece onu görmemeliyim (örneğin dallarda, kafalarda, kütükte).

Depoda kapalı bir şubenin kalmasını beklediğimi not etmeliyim; gelecekte faydalı olabilir ve commit --close-branchmesaj en azından şubenin neden kapatıldığını açıklamalıdır.
Dalları budamak tamamen başka bir şeydir.


Not: Mercurial ile karşılaştırıldığında, "şube kapatma" işi Git'te eksik olarak görülen bir unsurdur :

Git'teki şubeler, bize her zaman söylenen, geçici şeylerdir ve atılır ve bildiğim kadarıyla git, meslektaşlarınıza bir şubeyle işinizin bittiğini göstermenin bir yolu yoktur;
Bunu yapmanın tek yolu onu silmek veya nihai birleştirme taahhüdünü görmelerini ve şubenin daha fazla gelişime kapalı olduğunu anlamalarını ummaktır.

[Mercurial'de] Bir şubeyle işiniz bittiğinde, ancak, onu havuzdan silemezsiniz; bunun yerine şubeyi kapatan bir taahhüt yayınlarsınız ve Mercurial şubenin kapatıldığını belirtir. Depo geçmişinizin kalıcı bir parçası olarak kalacaktır.


3
Mevcut olmayan bir şubeyi kapatmanın bir yolu var mı?
Thomas S.

@ThomasS. 5 yıl sonra kesin olarak bilmiyorum. Belge yakın zamanda güncellendi: mercurial.808500.n3.nabble.com/…
VonC

1
@ThomasS. evet, bu cevap bu problemde bana yardımcı oldu. hg debugsetparent <revision> hg branch <branchOfRevision> Sıranın önemli olduğunu unutmayın. Bu, deponuzun yeni revizyonda olduğunu düşünmesini sağlarken, tüm dosyalarınız ilk dosyadandır. Bundan sonra --close-branch commit'i kullanabilirsiniz, ancak boş bir commit yapmak için -X * seçeneğini kullanabilirsiniz. hg commit --close-branch -X * -m "Closing branch."
Maske

8

PruningDeadBranches'ta bulunan komutları, dalı kapatmayı tamamlayan basit bir komut dosyası yazdım .

## Senaryo ##

#!/bin/bash
#script to close the not required branch in mercurial

hg up -C $1
if [ $? -eq 0 ]; then
    echo "$1 is up"
else
    echo "branch not found, please recheck your argument"
    exit 1
fi 
# if we are here then the branch is up, so we do the following
hg commit --close-branch -m 'this branch no longer required' 
echo "$1 is closed"
hg up -C default
echo "default is up" 

Nasıl

Deponun yerel kopyasına gidin ve bir argüman vererek bu komut dosyasını çalıştırın. Örneğin:

$./the_script_above.sh bad_branch_name_to_close

Bu ne işe yarıyor

Bu, aşağıdakileri yapar:

  1. Dal varsa, belirtilen dala güncellenir veya bir hata mesajı ile var olur.
  2. Şubeyi kapatır.
  3. Varsayılan dalda güncellemeler.
  4. Durur.

Komut dosyası, adında boşluklar bulunan dalları işlemez.
Jared

@Jared şubeniz ile bağımsız bir yukarı komut çalıştırabilir misiniz? İçin örnek: $ hg update yourbranchnamecontainingspace. Sanırım boşluk içeren bir dal adı oluşturabiliriz, ancak güncelleme gibi mercurial komutlarını çalıştırdığınızda bir ayrıştırma hatası alıyorsunuz . Şube adını komut dosyasına bir parametre olarak iletirken boşluk karakterinden kaçmayı düşünebilirsiniz. Şerefe.
Roshan Poudyal

değil echo "$1 is up"burada çoğaltılamaz? İçinde thenve sonrasında fi? Ayrıca, bu tür bir komut dosyası, aynı anda varsayılana birleştirme seçeneğini destekliyorsa yararlı olabilir
YakovL

1
@YakovL evet =). Bilgilendirme için teşekkürler. Senaryoyu güncelledim. Elbette isteğe bağlı birleştirme için faydalı olacaktır, gelecekte güncellemeye çalışacağım, ancak o zamana kadar senaryoyu zevkinize göre ölçeklendirebilirsiniz =)
Roshan Poudyal
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.