2010-10-02 9 views
32

Pracuję nad projektem, w którym mam zatwierdzenie, które wprowadziło funkcję z poważnymi problemami, które nie zostały natychmiast wykryte. Teraz chcę całkowicie usunąć tę poprawkę, zachowując pracę po niej, ale mam trudności z zawijaniem głowy wokół tego 3-drogowego scalenia. Oto uproszczony wykres mojego projektu.Jak działa 3 sposób scalania w Mercurial/Meld?

 
o changeset: 134:7f81764aa03a 
| tag:   tip 
| parent:  128:451d8a19edea 
| summary:  Backed out changeset 451d8a19edea 
| 
| @ changeset: 133:5eefa40e2a29 
| | summary:  (Change I need to keep keep) 
| | 
*snip 3 commits* 
| o changeset: 129:5f6182a97d40 
|/ summary:  (Change I need to keep keep) 
| 
o changeset: 128:451d8a19edea 
| summary:  (Change that introduced a major problem) 
| 
o changeset: 127:4f26dc55455d 
| summary:  (summary doesn't matter for this question) 

Jeśli rozumiem to poprawnie, r127 i r134 są dokładnie takie same. Kiedy I hg up -C -r 133, a następnie uruchomię hg merge, Meld wyskakuje z trzema formami jednego z moich plików: lokalnym, podstawowym i innym. lokalny wydaje się być r133, ale ciężko mi jest owijać głowę wokół tego, co znaczy "baza" i "inny".

Odpowiedz

34

Local jest R133

Inne jest R134

Baza jest R128 (wspólny przodek obu R133 i R 134)

Podczas wykonywania 3 way scalić porównuje wszystkie trzy, aby pomóc ci zdecydować, co zabrać i skąd. Widząc, jaka zmiana jest w drugiej rewizji i jak wyglądał wspólny przodek, jesteś w stanie podejmować bardziej świadomą decyzję co do tego, co zatrzymać i co zmienić.

+0

Więc mówisz, że wiele z tego będzie ręczne scalanie? – Pacerier

10

Twoje pytanie jest naprawdę mylące, ale oto niektóre informacje, które mogą ci pomóc.

  • Co to jest baza?

Baza jest niezmodyfikowaną wersją wersji, którą obecnie wyrejestrowałeś i pracowałeś. tam, gdzie ewentualnie rozwinęły się inne zmiany (możesz mieć poprawki pomiędzy aktualną lokalną i bazową!). jest tam, gdzie jest najbliższa wersja, z której nie odszedł inny widelec (ten sam rodzic) (w twoim przypadku r128)

  • Co to jest głowa?

Głowa to najnowsza wersja kontroli wersji. jeśli pracujesz sam na jednej kopii, prawdopodobnie będzie to baza. ale współpracownik mógł zmodyfikować ten sam plik i sprawdzić go w kontroli wersji, a potem głowa jest późniejsza niż podstawa.

  • Co to jest lokalny?

lokalny jest wersja zmodyfikowana (w przypadku R133)

  • Co jest inna?

Inny jest jakiś widelec/oddział, który ma również swoją bazę tak rodzica (w przypadku R134)

  • Jak 3-way pracy seryjnej?

3 sposób scalania działa (przynajmniej w układzie meldunkowym) hierarchicznie.zwykle od lewej do prawej tak:

lokalny> baza> Inne/głowica

local/baza jest głównie trywialny, bo jej po prostu to, czego zmodyfikowanym

następnie można scalić swoje zmiany do przeglądu głowy lub jeden z twoich współpracowników lub cokolwiek innego.

Może istnieć wiele innych poprawek/główek, ale to nie jest twoje zadanie, aby się połączyć i dlatego więcej niż 3 sposób porównania nie ma sensu.

+12

Twoja definicja głowy nie jest dokładna dla mercurial. Ostatnia rewizja w mercurial nazywa się "wskazówką". Wskazówka to zawsze głowa, ale głowa nie zawsze jest wskazówką. W połączeniu "głowa" nigdy nie jest "podstawową", ponieważ "podstawa jest ostatnim wspólnym przodkiem dwóch scalanych zestawów zmian. –