LINUX.ORG.RU

[Mercurial] Обмен изменениями между ветками


0

2

Доброго времени суток! Вопрос по Mercurial, скорее всего - нубский. Суть проблемы: имеется две ветки разработки из которых первая - содержит все сопровождаемые исходники, это главная ветка для разработчиков. Во второй ветке требуется исключить некоторые исходники (они будут помещены в разделяемые библиотеки, останутся лишь заголовочные файлы C++). Плюс к этому во второй ветке будет добавляться особый функционал. Как осуществить миграцию изменений из первой ветки во вторую таким образом, чтобы изменения касались только заголовочных файлов, например?

Надеюсь, описал проблему понятно, первый пост на этом форуме :)


Я бы попробовал hg merge и потом hg revert изменений всего, кроме заголовков.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

То есть, вручную указывать файлы, которые не нужны в этой ветке?

XyAH ()
Ответ на: комментарий от XyAH

> То есть, вручную указывать файлы, которые не нужны в этой ветке?

Изменения в которых не должны попасть в эту ветку. Если файлы вообще не нужны, удали их.

tailgunner ★★★★★ ()

Я бы посоветовал навести порядок (сам так делал):

  • Выделить библиотеки в один репозиторий
  • Выделить остальной код в другой
  • И пусть второй проект зависит от первого

Поясню ещё раз: не стоит дублировать исходники между двумя разными проектами, Mercurial слабо поможет, когда начнутся серьёзные расхождения.

Divius ★★ ()
Ответ на: комментарий от tailgunner

[quote]Если файлы вообще не нужны, удали их.[/quote] Да, например, я их удаляю. А при мерже с каким-то чейнджсетом из другой ветки, в котором они опять фигурируют, они ведь снова появятся в этой ветке. И чейнджсет может быть объемным по составу изменений. Можно ли как-то заранее сказать Mercurial'у что вот из этих-то файлов мне изменения в эту ветку не нужны, а вот эти файлы - нужны? Я посмотрю в сторону hg revert, спасибо за совет :). Но всё равно придется много руками делать в этом случае...

Мне просто интересно, как в таких случаях действуют.

XyAH ()
Ответ на: комментарий от XyAH

черт, так и хочется сказать, что в СВН и джит єто как два пальца об асфальт .

Jetty ★★★★★ ()
Ответ на: комментарий от Jetty

> черт, так и хочется сказать, что в СВН и джит єто как два пальца об асфальт .

Ну-ну, расскажи, как это делается там. Начни с SVN.

tailgunner ★★★★★ ()
Ответ на: комментарий от XyAH

> Да, например, я их удаляю. А при мерже с каким-то чейнджсетом из другой ветки, в котором они опять фигурируют, они ведь снова появятся в этой ветке.

Не появятся, если ты их удалил и зафиксировал это. Если в родительском репозитории поменялись файлы, которые ты удалил в дочернем, то при очередном мерже меркуриал спросит что делать с этими файлами (что-то вроде: локальный файл был удален, а файл из удаленной репы поменялся, что делать? (удалить, взять измененный)). Он (hg) достаточно умный и запоминает историю слияний.

SilentBob ()
Ответ на: комментарий от XyAH

> То есть, вручную указывать файлы, которые не нужны в этой ветке?

А как это возможно сделать иначе? Система контроля версий не может (и не должна) сама предполагать какие изменения тебе нужны, а какие нет.

SilentBob ()
Ответ на: комментарий от Divius

Поясню ещё раз: не стоит дублировать исходники между двумя разными проектами, Mercurial слабо поможет, когда начнутся серьёзные расхождения.

+100500 от себя добавлю, что не «слабо поможет», а сильно мешаться будет

shty ★★★★★ ()
Ответ на: комментарий от tailgunner

легко решает проблему неврсионніх файлов :)

Jetty ★★★★★ ()
Ответ на: комментарий от Jetty

> легко решает проблему неврсионніх файлов :)

Совсем не решает проблему ТС.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

ну очевидно же что

svn merge
svn resolve -R --accept=working .
svn status | grep -E '^?.*cpp$' | xargs rm

Если до мержа таких файлов небыло, по посля мержа и резолва они будут неверсионные и их можно банально удалить.

Jetty ★★★★★ ()

Если во второй ветке содержатся только хедеры, почему бы не сделать изменения там и не перенести их в первую? Черрипикинг - это обычно геморрой.

JackyTreehorn ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.