Иван Сагалаев написал про проблемы слияния веток репозитория при использовании subversion. Это навело меня на мысль проверить, как с такими вещами в используемом мной mercurial? По ходу обнаружилось, что на моей локальной машине до сих пор установленная версия 0.8, в том время как все вкусности появились только начиная с 1.0. Чтож, хороший повод обновиться.
Итак, тест первый.
mkdir trunk
cd trunk
hg init
Создаю в нём модуль old_name.py с одной функцией:
def old_func():
return 'initial'
Клонирую репозиторий
cd ..
hg clone trunk branch
и переименовываю модуль в новой ветке
cd branch
hg rename old_name.py new_name.py
hg ci -m 'old_name.py -> new_name.py' old_name.py new_name.py
Меняю функцию в old_name.py в trunk и добавляю новую, в результате получаю такой код:
def old_func():
return 'changed'
def new_func():
pass
Комичу изменения и пробую слить trunk с branch:
hg ci -m 'old_func is changed; new_func is added' old_name.py
cd ../branch
hg pull ../trunk
hg merge
Всё проходит замечательно и все изменения old_name.py в trunk успешно попадают в new_name.py в branch.Ради интереса, я повторил тест со старой версией. При слиянии mercurial сообщает о том, что был изменён удалённый файл и предлагает либо добавить его, либо удалить. То есть ни о каком слиении изменений речи не идёт.
2 комментария:
Спасибо за тесткейс! Попробую, если с bazaar не получится (я с него просто начал).
И пожалуйста, исправьте мою фамилию в посте -- Сагалаев.
Oops, исправил.
Отправить комментарий