2010-10-25 17 views
5

Wyobraźmy sobie następujący scenariusz:Rtęć, konflikty, łączenie, dalsze konflikty później, czy Mercurial pamięta początkową rozdzielczość?

  1. Alicja i Bob oba klony centralny mistrzowskie Mercurial repozytorium zawierające 1 plik tekstowy
  2. Zarówno Alicja i Bob wprowadza zmiany do tej samej linii w pliku, i zobowiązuje
  3. Bob odpycha do centralnego repozytorium, ale nie Alice
  4. Alice ciągnie teraz do swojego repozytorium, zawiadomienia ona teraz ma dwie głowy, i łączy
  5. Ponieważ seryjnej konflikt, ona rozwiązuje konflikt
  6. Alicja następnie zatwierdza, ale nie pchnie
  7. Bob teraz wprowadza dalsze zmiany w pliku, w innym miejscu pliku (np. nigdzie w pobliżu początkowych zmian) i zatwierdza, i pcha
  8. Alice, w jej scalonym pliku, robi podobną zmianę w tej samej lokalizacji, którą Bob właśnie zmienił, i zatwierdza
  9. Alice ciągnie i odkrywa kolejne dwugłowe repozytorium, ona scala

Oto inny widok powyższym scenariuszu

(liczby po „zmiana” oznacza, że ​​dana osoba zmieniła „część X” z pliku. Jeśli obaj użytkownicy zmienił tę samą część, mamy konflikt z przodu, jeśli zmienili się inaczej, nie tak bardzo)

 
    Alice     Bob 
    CLONE MASTER    CLONE MASTER 
    ----------------------------------------- 
    CHANGE 1        <-----+ 
    COMMIT          +-- upcoming merge conflict 
    ----------------------------------------- | 
          CHANGE 1  <-----+ 
          COMMIT 
          PUSH 
    ----------------------------------------- 
    PULL         <-- Bob's change +1 head 
    MERGE         <-- Attempt to get rid of extra head 
    RESOLVE CONFLICT      <-- Resolve merge conflict 
    COMMIT 
    ----------------------------------------- 
          CHANGE 2  <-----+ 
          COMMIT    +-- yet another merge 
          PUSH    | conflict ahead 
    ----------------------------------------- | 
    CHANGE 2        <-----+ 
    COMMIT 
    PULL         <-- Bob's change, again +1 head 
    MERGE         <-- Attempt to get rid of extra head 
    RESOLVE ??? 

W tym momencie moje pytanie brzmi:

  • Will narzędzia Scalanie podjąć swoją pierwszą uchwałę seryjnej pod uwagę? Ponieważ Bob nigdy nie wycofał zmian Alice, jego kopia jest nadal nieważna z powodu zmian, które wprowadziła Alice, jej początkowej zmiany (która była w konflikcie z Boba), jej scalenia i ostatniej zmiany, która jest w konflikcie z ostatnią zmianą Boba .

Gdybym po prostu pobrał wersję pliku Boba i wersję pliku Alice i przekazany do dowolnego programu scalającego, oznaczałby obie zmiany jako będące w konflikcie.

Innymi słowy, czy narzędzie konfliktu spróbuje poprosić Alice o rozwiązanie zarówno pierwotnego konfliktu, jak i nowego, czy tylko ostatniego?

Zgaduję ( Nie próbowałem tego, wciąż próbując zbudować jakiś skrypt testowy, aby przetestować ten problem ), że Mercurial poprosi Alice tylko o rozwiązanie ostatniego konfliktu.

Co się stanie, jeśli skonfiguruję Mercurial, aby używał programu innej firmy do porównywania/scalania? Czy to nadal będzie obowiązywać? Na przykład, skonfigurowałem moją instalację do używania Beyond Compare, czy dwa pliki (Bob z tylko jego zmianami i Alice z jej zmianami + rozdzielczość scalania) będą podane z początkową obecną rozdzielczością lub bez niej? Innymi słowy, jeśli użyjesz Beyond Compare, poprawi się również tutaj (zakładając, że to w ogóle działa).

Odpowiedz

5

Mercurial będzie wymagał tylko rozwiązania ostatniego konfliktu, a to będzie działało dobrze z narzędziami zewnętrznej zmiany.

Kiedy Alice wykonuje swoje drugie połączenie, łączy swoje własne wcześniejsze połączenie z nową trójkątami boba i tylko ta zmiana musi zostać zintegrowana na nowo.

Naprawdę przejrzysty schemat, BTW. Dzięki

+0

OK, więc scenariusz nie będzie stanowił problemu, nie będzie coraz trudniej scalać zmiany w "zajętych" plikach? –

+0

@Lasse V. Karlsen wcale. – msarchet

+0

Tak, to całkiem normalny przepływ pracy. Najlepiej, żeby Bob lepiej radził sobie z jego sprawiedliwym udziałem w ciągnięciu i łączeniu, ale kiedy bob jest projektem zewnętrznym, to nie zawsze jest to możliwe. Działa świetnie. –

2

To tylko poprosi Alice o zmianę ostatniego konfliktu.

Powodem tego jest następujący:

ma już zmian 1 z BOB To w jej historii, więc nie będzie ponownie spróbować zmienić ten kod. To działa.

Powiązane problemy