Yerel depomda yaptığım bir dizi değişiklik var, ancak henüz gönderilmedi. Bir özellik beklenenden daha uzun sürdüğünden, bu değişiklikleri itmeden önce adlandırılmış bir dalla değiştirmek istiyorum. Bunu nasıl yapabilirim?
Yerel depomda yaptığım bir dizi değişiklik var, ancak henüz gönderilmedi. Bir özellik beklenenden daha uzun sürdüğünden, bu değişiklikleri itmeden önce adlandırılmış bir dalla değiştirmek istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
Mark tarafından önerildiği gibi, MqExtension sizin sorununuz için bir çözümdür. IMHO daha basit bir iş akışı, rebase uzantısını kullanmaktır . Bunun gibi bir geçmişiniz olduğunu varsayalım:
@ changeset: 2:81b92083cb1d
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 1:8bdc4508ac7b
| summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
Bu, revizyonun 0
, özelliğiniz üzerinde çalışmaya başladığınız temel olduğu anlamına gelir . 1-2
Diyelim ki adlandırılmış bir dalda revizyon yapmak istiyorsunuz my-feature
. Revizyon için güncelleme yapın 0
ve bu şubeyi oluşturun:
$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"
Geçmiş şimdi şöyle görünüyor:
@ changeset: 3:b5939750b911
| branch: my-feature
| tag: tip
| parent: 0:d554afd54164
| summary: start new branch my-feature
|
| o changeset: 2:81b92083cb1d
| | summary: my new feature: edit file a
| |
| o changeset: 1:8bdc4508ac7b
|/ summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
rebase
Revizyonları 1-2
revizyona taşımak için komutu kullanın 3
:
$ hg rebase -s 1 -d 3
Bu, aşağıdaki grafikle sonuçlanır:
@ changeset: 3:88a90f9bbde7
| branch: my-feature
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 2:38f5adf2cf4b
| branch: my-feature
| summary: my new feature: add file b
|
o changeset: 1:b5939750b911
| branch: my-feature
| summary: start new branch my-feature
|
o changeset: 0:d554afd54164
summary: initial
İşte bu .. Mark'ın cevabına yapılan yorumlarda da belirtildiği gibi, geçmiş manipülasyonunuzu iletebildiğiniz ve uygulayabildiğiniz küçük bir ekipte çalışmadığınız sürece, zaten zorlanmış değişiklik kümelerinin etrafında dolaşmak genellikle kötü bir fikirdir.
fold
, şimdi yerleşik histedit uzantısının komutunu kullanarak ).
hg log -G
( GraphlogExtension ). Bazı satırları manuel olarak çıkardım, ancak özel günlük stilleri kullanılarak tamamen otomatik olarak da oluşturulmuş olabilir .
MqExtension'ı kullanabilirsiniz . Taşınacak değişiklik kümelerinin 1-3 revizyonları olduğunu varsayalım:
hg qimport -r 1:3 # convert revisions to patches
hg qpop -a # remove all them from history
hg branch new # start a new branch
hg qpush -a # push them all back into history
hg qfin -a # finalize the patches
Mark Tolonen tarafından burada açıklanan yama çözümünü tercih ediyorum
Neyim var:
hg log -G
#default branch
@ changeset: 3:cb292fcdbde1
|
o changeset: 2:e746dceba503
|
o changeset: 1:2d50c7ab6b8f
|
o changeset: 0:c22be856358b
İstediğim:
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
/
|
o changeset: 0:c22be856358b
mercurials komutları:
hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff
İşte yerel depomun durumu
@ changeset: 6:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 5:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 4:7b9836f25f28
| branch: feature/my_feature
|
| o changeset: 3:cb292fcdbde1
| |
| o changeset: 2:e746dceba503
| |
| o changeset: 1:2d50c7ab6b8f
|/
|
o changeset: 0:c22be856358b
Şimdi varsayılan şubemden 1 2 ve 3 revizyonlarını silmem gerekiyor. Bunu mq'nin uzantısından strip komutu ile yapabilirsiniz.
hg strip
değişiklik kümesini ve tüm soyundan gelenleri depodan kaldırır.
Yapılandırma dosyanıza (.hgrc veya Mercurial.ini) aşağıdaki satırları ekleyerek uzantıyı etkinleştirin:
vim ~/.hgrc
ve Ekle :
[extensions]
mq =
Ve şimdi bu depoyu revizyon 1'de çıkarın.
hg strip 1
ve işte buradayız
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
o changeset: 0:c22be856358b
not: değişiklik grupları farklıdır ancak revizyonlar aynıdır
GUI kullanmaya meyilli olanlar için
Tortoise Hg
-> File
-> Settings
seçeneğine gidin ve ardından işaretleyin rebase
.Kaplumbağa kullanıcı arayüzünü yeniden başlatın
Değişiklikleri taşıyacağınız yeni şube oluşturun. Mevcut şube adına tıklayın -> seçin Open a new named branch
-> şube adını seçin.
public
(örneğin draft
) 5.'e gidin (Değişiklikler zaten yayınlanmışsa ve kıdemli bir geliştirici değilseniz, işleri büyük ölçüde alt üst edebileceğiniz için kıdemli biriyle konuşmalısınız (bir günah keçisi alın) , Hiçbir sorumluluk almıyorum :)).View
-> Show Console
(veya Ctrl+ L) seçeneğine gidin ve ardından konsolda yazın hg phase -f -d 2
- burada 2 en düşük revizyondur, yeni şubeye geçeceksiniz.
Branşmana ve revizyona git (değişiklikleri 3. adımda oluşturulan yeni şubeye taşıyorsanız en üstteki revizyon olmalıdır) Right Mouse
->Update
Dal ve revizyona gidin, değişiklikleri Right Mouse
-> Modify History
-> ' den taşıyacaksınız.Rebase
Tıklayın Rebase
ve çatışma olmasın dua edin, gerekirse birleştirin.
Değişiklikleri itin, bu noktada tüm revizyonlar yine de olmalıdır draft
.
Değişiklikleri taşıdığınız dalda en üstteki revizyona gidin Right Mouse
-> Change Phase to
-> Public
.
Umarım bu size biraz zaman kazandırır.
public
artık otomatik olarak değişmiyorlar (en azından benim için değişmiyorlar ).