Слияние веток Mercurial из отдельных репозиториев - PullRequest
30 голосов
/ 04 марта 2011

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

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

PJT1 - содержит ветви по умолчанию и foodog

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

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

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

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

[someone@myhome pjt2]$ hg branches
foodog                         1:c1e14fde816b
default                        0:7b1adb938f71 (inactive)

и hg branch обнаружит следующее:

[someone@myhome pjt2]$ hg branch
foodog

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

Ответы [ 2 ]

55 голосов
/ 04 марта 2011

Вам нужно объединиться, но имейте в виду, что изменения в 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

0 голосов
/ 05 марта 2011

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

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

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

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

...