Wyobraźmy sobie następujący scenariusz:Rtęć, konflikty, łączenie, dalsze konflikty później, czy Mercurial pamięta początkową rozdzielczość?
- Alicja i Bob oba klony centralny mistrzowskie Mercurial repozytorium zawierające 1 plik tekstowy
- Zarówno Alicja i Bob wprowadza zmiany do tej samej linii w pliku, i zobowiązuje
- Bob odpycha do centralnego repozytorium, ale nie Alice
- Alice ciągnie teraz do swojego repozytorium, zawiadomienia ona teraz ma dwie głowy, i łączy
- Ponieważ seryjnej konflikt, ona rozwiązuje konflikt
- Alicja następnie zatwierdza, ale nie pchnie
- Bob teraz wprowadza dalsze zmiany w pliku, w innym miejscu pliku (np. nigdzie w pobliżu początkowych zmian) i zatwierdza, i pcha
- Alice, w jej scalonym pliku, robi podobną zmianę w tej samej lokalizacji, którą Bob właśnie zmienił, i zatwierdza
- 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).
OK, więc scenariusz nie będzie stanowił problemu, nie będzie coraz trudniej scalać zmiany w "zajętych" plikach? –
@Lasse V. Karlsen wcale. – msarchet
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. –