Подтвердить что ты не робот

Объединение веток Mercurial из отдельных репозиториев

Я пытаюсь выяснить, как объединить ветки из отдельного репо в текущий.

У меня есть следующее:

PJT1 - содержит ветки default и foodog

PJT2 - содержит значение по умолчанию

из PJT2, я делаю следующее:

$ hg fetch -y ../PJT1 -r foodog -m "this is a test"

Теперь, если я смотрю в PJT2, я вижу правильные файлы и изменения. Однако, если я делаю hg branches, я получаю следующее:

[[email protected] pjt2]$ hg branches
foodog                         1:c1e14fde816b
default                        0:7b1adb938f71 (inactive)

и hg branch показывает следующее:

[[email protected] pjt2]$ hg branch
foodog

Как получить содержимое из ветки PJT1 foodog в ветку PJT2 default?

4b9b3361

Ответ 1

Вам нужно объединиться, но имейте в виду, что изменения на ветке foodog всегда будут на foodog - ветки никогда не уходят, но они могут быть скрыты. Эта последовательность команд находится как можно ближе к тому, что вы просите:

cd PJT2
hg update default # just in case you were somewhere else
hg pull ../PJT1 -r foodog  # that gets you foodog
hg merge foodog  # that merges the changes into default
hg commit # commit the merge
hg update foodog # go to the most recent change in foodog (note: it is not a 'head')
hg commit --close-branch

После слияния hg branches будет отображаться foodog, если вы не сделаете hg branches --active, который показывает только ветки с головками. После commit --close-branch вы не увидите foodog, если вы не сделаете hg branches --closed.

Это потому, что ветки в Mercurial никогда не уходят полностью (конструктивная особенность), что они часто зарезервированы только для жизненных вещей, таких как release-1.0 или stable. Для недолговечных усилий, таких как ошибки и функции, используйте вместо них закладки. Здесь большое сравнение двух: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial

Ответ 2

Вы также можете попробовать использовать расширение rebase. Он будет выглядеть примерно так:

hg fetch -y ../PJT1 -r foodog -m "this is a test"
hg rebase --source <sRev> --dest <dRev>

Действие по перестановке будет отменять набор изменений sRev и всех потомков и применить группу изменений к набору изменений dRev. По умолчанию изменения будут применены к ветке по умолчанию. Итак, в вашем случае sRev будет первым набором изменений в ветке foodog, а dRev будет набором изменений по умолчанию, к которому вы хотите применить.

Наконец, если вы хотите переопределить это и сохранить имя ветки источника, вы можете использовать опцию rebase --keepbranches. Ваши вопросы указывают, что это именно то, чего вы не хотите делать, но все равно следует отметить.