SORU
5 Kasım 2008, ÇARŞAMBA


Bir geriye dönüş Mercurial birleştirme

Nasıl bir etkisi polarize şubeleri birleştirme acı ölmeden ters musunuz?

Bu sorun için beni cezalandırıyorayve sonunda vazgeçtim.

1 Depo, 2AdlandırılmışDalları. A ve B

Bir meydana gelen değişiklikleri B. kaçınılmaz olarak ortaya çıkar

Doğrudan B oluşan değişiklikleri ASLA A. yürütülmelidir

Bu tür bir yapılandırmada," "B tüm değişiklikler A . yapılan gibi Bir görünür olarak" depodaki korkunç bir sorun oluşturur, içine "B birleştirme

Sadece "" ve bu durum "dışarı" birleştirme, yani: . destek görünüyor kurtarmak için normal

 hg up -r A 
 hg backout -r BadMergeRev --parent BadMergerevBeforeOnA 

Hangi gözüküyor hepsi iyi ve güzel, kadar karar Birleştir daha sonra doğru yönde ve sonuna kadar her türlü kötü şeyler oluyor ve kod oldu silindi diye özellikle şube B aniden olur unerased veya uncommented.

Bu çalışma için geçerli bir çözüm şimdiye kadar "işini yapmasına izin verin, ve el tüm sorunları çözmek sonra" ve dürüst olmak gerekirse bu biraz çığrından çıktı. daha başka olmamıştır

İşte bir görüntü sorunu açıklama:

[Resim kayıp orijinal]

Dosyaları C & E ( veya değişiklikler C & E ) şube a şube b sadece ve almalıdır. Revizyon A9 burada ( şube, revno 9 ) sorunun başlangıcı.

Revizyonlar A10 ve A11 "" ve "backout birleştirme" aşamaları. Backout birleştirme vardır

Ve revizyon B12 mercurial, yanlışlıkla defalarca kesilmesine tasarlanmamış bir değişiklik düşüyor.

Bu İkilem çok hayal kırıklığı ve mavi duman neden oldu ve buna bir son vermek istiyorum.

Not

Olabilir açık cevap vermeye çalışıyoruz yasaklayan ters birleştirme sonucu ortaya çıkan, ya da kanca ya da politikaları buldum yeteneği muck bu oldukça yüksek bir ihtimal oluyor o yüzden büyük olasılıkla o bile karşıgerekirhala bu kaçınılmaz, öyle varsayalımzaman çözmek öyle olur.

Durmak İçin

Modeli Ayrı dosyalarını kullandım. Bu sorunun basit bir ses olun. Bu sadece bir temsilkeyfi olarak değiştirirayrı bir hat olabilir.

Ayrıca, düşene bir tekme de orada olması önemli değişiklikler üzerinde Bir şube yaprakları ayakta sorun, "değişiklikler, Bir şube ile çatışma değişiklikleri şube B çıkageldi ( ve döneklik ) görünüşe göre bir değişiklik üzerinde Bir şube yerine"

Tarihi Oyunlar Tekrar Yazarlar

Retro-aktif tüm bu çözümler ile sorun aşağıdaki gibidir:

  1. Biz 9000 tamamlar.
  2. Taze klonlama böylece yarım saat sürer
  3. Varsa oradabir tane biledepoyu kötü klonbir yere, muhtemelen geri orijinal depo ile temas halinde geliyor, ve tekrar vurmaya kadar hepsi var.
  4. Herkes zaten bu depo klonlanmış ve şimdi birkaç gün devam iptalleri ile geçti.
  5. Böyle bir klon, canlı bir site olur, "bunu silip sıfırdan başlamak" = "" . büyük nono yani

( İtiraf ediyorum, ben yukarıda çok biraz kaçık, ama benim kontrolüm dışında ).

Geçerli olan tek çözüm bu insanlara farz olanlardırolabilirveher şey yanlış, ve bir şekilde bu yanlışlığı. Geri Al yap

CEVAP
19 Ocak 2010, Salı


Sürekli kötü birleştirme giderir ve el ile herhangi bir farklar kontrol gerektirmeyen bir çözüm buldum. Hile geçmişe dönüp işleyen kötü birleştirme paralel oluşturmaktır.

Tek bir ürünün muhafaza sürüm başına ayrı dalları olan bir havuz var. Bu durum, söz konusu poz vermiş gibi, tüm değişiklikleri önceki bir sürümü (örn. bir şube yapılmış bu sürümde) için hata düzeltme sonunda, daha sonra dallarının birleştirilmiş olmalıdır.

Eğer bir şey BRANCH_V9 birleştirilmiş olmalı BRANCH_V8, üzerinde işaretli ise, özellikle.

Şimdi aşağıdaki hata yapar geliştiricilerinden biri : BRANCH_V8 (örn. içine BRANCH_V9 tüm değişiklikleri o birleştirir bir yanlış yöne birleştirme). O kadar da kötü birleştirme üstelik, sonra o yapar fazladan o hatasını fark etmeden tamamlar.

Yani durum grafik günlüğüne aşağıdaki gibidir.

o  BRANCH_V8 - 13 - important commit right after the bad merge
|
o    BRANCH_V8 - 12 - wrong merge from BRANCH_V9
|\
| o  BRANCH_V8 - 11 - adding comment on BRANCH_V8 (ie. last known good state)
| |
o |  BRANCH_V9 - 10 - last commit on BRANCH_V9
| |

Aşağıdaki gibi bu hatayı düzeltebiliriz

  1. güncelleme BRANCH_V8 son iyi duruma yerel dizin: hg update 11
  2. Son günlerde devlet : yeni bir çocuk oluşturun
    1. bazı dosya $EDITOR some/file.txt (Bu Mercurial boş izin vermez, çünkü bu gereklidir taahhüt) değiştirin
    2. bu değişiklikler hg commit -m "generating commit on BRANCH_V8 to rectify wrong merge from BRANCH_V9" commit
      Durum Şimdi aşağıdaki gibi görünür :
      o  BRANCH_V8 - 14 - generating commit on BRANCH_V8 to rectify wrong merge from BRANCH_V9
      |
      | o  BRANCH_V8 - 13 - important commit right after the bad merge
      | |
      | o  BRANCH_V8 - 12 - wrong merge from BRANCH_V9
      |/|
      o |  BRANCH_V8 - 11 - adding comment on BRANCH_V8
      | |
      | o  BRANCH_V9 - 10 - last commit on BRANCH_V9
      
  3. İşlemeden önce hangi kötü birleştirme oldu, ve tüm değişiklikleri atmak revizyonu ile yeni oluşturulan baş birleştirme.O zaman kaybedersiniz, çünkü sadece iki kafa birleştirme değil, önemli Birleştir de sonra oldu olan taahhüt!

    1. birleştirme : hg merge 12 (Yoksay herhangi bir çakışma)
    2. tüm değişiklikleri atmak : hg revert -a --no-backup -r 14
    3. değişiklikler : hg commit -m "throwing away wrong merge from BRANCH_V9" Bu gelişme şimdi gibi görünüyor :
      o    BRANCH_V8 - 15 - throwing away wrong merge from BRANCH_V9
      |\
      | o  BRANCH_V8 - 14 - generating commit on BRANCH_V8 to rectify wrong merge from BRANCH_V9
      | |
       ---o  BRANCH_V8 - 13 - important commit right after the bad merge
      | |
      o |  BRANCH_V8 - 12 - wrong merge from BRANCH_V9
      |\|
      | o  BRANCH_V8 - 11 - adding comment on BRANCH_V8
      | |
      o |  BRANCH_V9 - 10 - last commit on BRANCH_V9
      | |
      

    Yani. BRANCH_V8 iki baş var: kötü düzeltme birleştirme içeren bir sol üzerinde önemli birleştirmeyi hemen sonra oldu. BRANCH_V8 konusunda taahhüt içeren

  4. BRANCH_V8 :iki kafa birleştirme
    1. birleştirme : hg merge
    2. tamamlama : hg commit -m "merged two heads used to revert from bad merge"

BRANCH_V8 sonunda durumu düzelttim şimdi, ve bu gibi görünüyor:

o    BRANCH_V8 - 16 - merged two heads used to revert from bad merge
|\
| o    BRANCH_V8 - 15 - throwing away wrong merge from BRANCH_V9
| |\
| | o  BRANCH_V8 - 14 - generating commit on BRANCH_V8 to rectify wrong merge from BRANCH_V9
| | |
o | |  BRANCH_V8 - 13 - important commit right after the bad merge
|/ /
o |  BRANCH_V8 - 12 - wrong merge from BRANCH_V9
|\|
| o  BRANCH_V8 - 11 - adding comment on BRANCH_V8
| |
o |  BRANCH_V9 - 10 - last commit on BRANCH_V9
| |

Şimdi BRANCH_V8 durumu düzeltmek. Tek sorun kalan bir sonraki birleştirme BRANCH_V8 için BRANCH_V9 hatalı olur, olur birleştirme 'düzeltmek' için kötü birleştirme de, biz istemiyoruz üzerinde BRANCH_V9. Hile burada ayrı değişiklikler: BRANCH_V9 için BRANCH_V8 birleştirmek

  • İlk olarak, kötü birleştirme önce BRANCH_V9, BRANCH_V8 doğru değişiklikler BRANCH_V8 birleştirme.
  • İkinci hata ve düzeltme, birleştirme, ve, bir şeyi kontrol etmeye gerek kalmadan, tüm değişiklikleri atmak birleştirme
  • Üçüncüsü BRANCH_V8 kalan değişiklikleri birleştirme.

Ayrıntılı olarak:

  1. BRANCH_V9 için çalışma dizini anahtarı : hg update BRANCH_V9
  2. BRANCH_V8 en son iyi duruma (örn. birleştirme bu kötü birleştirme) düzeltme için oluşturulan işlemek. Bu bir düzenli birleştirme, ıe gibi birleştirme. çatışmalar her zamanki gibi çözülmesi gerektiğini ve hiçbir şeyin çöpe atılması gerekiyor.
    1. birleştirme : hg merge 14
    2. tamamlama : hg commit -m "Merging in last good state of BRANCH_V8" Şimdi durum şudur :
      @    BRANCH_V9 - 17 - Merging in last good state of BRANCH_V8
      |\
      | | o    BRANCH_V8 - 16 - merged two heads used to revert from bad merge
      | | |\
      |  ---o  BRANCH_V8 - 15 - throwing away wrong merge from BRANCH_V9
      | | | |
      | o | |  BRANCH_V8 - 14 - generating commit on BRANCH_V8 to rectify wrong merge from BRANCH_V9
      | | | |
      | | o |  BRANCH_V8 - 13 - important commit right after the bad merge
      | | |/
       ---o  BRANCH_V8 - 12 - wrong merge from BRANCH_V9
      | |/
      | o  BRANCH_V8 - 11 - adding comment on BRANCH_V8
      | |
      o |  BRANCH_V9 - 10 - last commit on BRANCH_V9
      | |
      
  3. BRANCH_V8 kötü birleştirme konusundaki düzeltme, birleştirme ve uzak tüm değişiklikleri atmak :
    1. birleştirme : hg merge 15
    2. tüm değişiklikleri geri getir : hg revert -a --no-backup -r 17
    3. tamamlama birleştirme : hg commit -m "Merging in bad merge from BRANCH_V8 and its fix and throwing it all away" Mevcut durum :
      @    BRANCH_V9 - 18 - Merging in bad merge from BRANCH_V8 and its fix and throwing it all away
      |\
      | o    BRANCH_V9 - 17 - Merging in last good state of BRANCH_V8
      | |\
       -----o  BRANCH_V8 - 16 - merged two heads used to revert from bad merge
      | | | |
      o---  |  BRANCH_V8 - 15 - throwing away wrong merge from BRANCH_V9
      | | | |
      | | o |  BRANCH_V8 - 14 - generating commit on BRANCH_V8 to rectify wrong merge from BRANCH_V9
      | | | |
       -----o  BRANCH_V8 - 13 - important commit right after the bad merge
      | | |
      o---   BRANCH_V8 - 12 - wrong merge from BRANCH_V9
      |/ /
      | o  BRANCH_V8 - 11 - adding comment on BRANCH_V8
      | |
      o |  BRANCH_V9 - 10 - last commit on BRANCH_V9
      | |
      
  4. BRANCH_V8 soldan-sağa değişiklikleri birleştirme :
    1. birleştirme : hg merge BRANCH_V8
    2. tamamlama : hg commit -m "merging changes from BRANCH_V8"

Son durum bu gibi görünüyor:

@    BRANCH_V9 - 19 - merging changes from BRANCH_V8
|\
| o    BRANCH_V9 - 18 - Merging in bad merge from BRANCH_V8 and its fix and throwing it all away
| |\
| | o    BRANCH_V9 - 17 - Merging in last good state of BRANCH_V8
| | |\
o | | |  BRANCH_V8 - 16 - merged two heads used to revert from bad merge
|\| | |
| o---   BRANCH_V8 - 15 - throwing away wrong merge from BRANCH_V9
| | | |
| | | o  BRANCH_V8 - 14 - generating commit on BRANCH_V8 to rectify wrong merge from BRANCH_V9
| | | |
o | | |  BRANCH_V8 - 13 - important commit right after the bad merge
|/ / /
o---   BRANCH_V8 - 12 - wrong merge from BRANCH_V9
|/ /
| o  BRANCH_V8 - 11 - adding comment on BRANCH_V8
| |
o |  BRANCH_V9 - 10 - last commit on BRANCH_V9
| |

Herhangi bir diff elle kontrol etmek zorunda değilsiniz tüm bu adımları sonra, BRANCH_V8 ve BRANCH_V9 doğru ve BRANCH_V9 için BRANCH_V8 gelecek birleştirir doğru olacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • esnathesinger

    esnathesinge

    6 NİSAN 2009
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • Rockstar Games

    Rockstar Gam

    17 ŞUBAT 2006