Mercurial совершает и объединяет

С Mercurial я часто вижу сценарий, в котором мне нужно постепенно совершать толчок, но если другой человек совершает посередине этого, то я попадаю в проблему.

Пример: предположим, что в репозитории HG есть четыре файла: a.txt, b.txt, c.txt, d.txt, и у нас есть два пользователя: Микки и Гуфи:

Mickey does:  $ echo "change1" >> a.txt
Mickey does:  $ echo "change2" >> b.txt
Mickey does:  $ echo "change3" >> c.txt
Mickey does:  $ hg commit -m "I am good" a.txt
Goofy does:   $ hg pull -u; echo "change4" >> d.txt; hg commit -m "The Donald change" 

Микки готов к коммиту и толканию, но должен слиться: Микки делает: $ hg pull -u

Теперь у Микки есть два изменения - в b.txt и c.txt. Предположим, что его изменения в c.txt сложны и не могут быть выпущены прямо сейчас. Как Микки может получить свои изменения в a.txt и b.txt, зафиксированные и отправленные еще без фиксации c.txt?

2 ответа

Решение

Просто введите имена файлов, которые вас интересуют:

hg commit a.txt b.txt -m'partial commit'

Затем нажмите как обычно.

РЕДАКТИРОВАТЬ: Вы можете попытаться сохранить локальные изменения как патч, отменить и вытащить удаленные изменения, а затем применить патч:

hg diff > local.patch
hg revert
hg pull -u
patch -p1 < local.patch

Ваш вопрос мне не совсем понятен, пожалуйста, поправьте меня, если я вас неправильно понял.

Что Микки имеет в своем репо это (A - Микки смена с a изменилось, D - Смену Гуфи с d изменилось, w - Рабочая копия Микки с b а также c изменено):

-- o --- A --- w
    \
     D

Теперь у Микки множество вариантов. b готов к освобождению, поэтому он немедленно передает его:

$ hg ci b.txt -m "Finished working on b.txt"

-- o --- A --- B --- w
    \
     D

Только сейчас c изменения остаются в рабочей копии. Микки выполняет промежуточный коммит:

$ hg ci -m "working on c"

-- o --- A --- B --- C' --- w
    \
     D

Рабочая копия чистая. Чтобы убедиться C' не включается в слияние, Микки обновляет предыдущую ревизию, затем сливается:

$ hg up B
$ hg merge D
$ hg ci -m "Merged with Goofy"

-- o --- A --- B --- C
    \           \
     D --------- M --- w

Теперь Микки может продолжить работу над Cи измените коммит, когда он будет готов:

$ hg up C
$ echo "final change" >> c.txt
$ hg ci --amend -m "Finished working on c.txt"

Отсюда Микки может либо слиться, либо перебазировать (кстати, слияние с Гуфи тоже может быть перебазированием).

Другие вопросы по тегам