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"
Отсюда Микки может либо слиться, либо перебазировать (кстати, слияние с Гуфи тоже может быть перебазированием).