Частичное (на файл / папку) ветвление / пометка в Mercurial? - PullRequest
4 голосов
/ 12 февраля 2011

В классических VCS (CVS / SVN) я могу добавить новые файлы / папки в одну ветку, а затем пометить их тегом какой-либо ветви, чтобы они появились и в другой ветви (откуда ониможет снова расходиться)Это работает, обновляя вашу рабочую копию до определенного состояния, а затем устанавливая тег ветви.

Как мне добиться чего-то подобного в Mercurial?Я искал далеко и широко, но, похоже, нет никакого способа переместить только несколько файлов / папок в другую ветвь.

В моем случае некоторые исторические ветки получили некоторые обновления, которые теперь должны быть перемещены в текущую активнуюветвь (это было до того, как репо был преобразован из Subversion в Mercurial).Есть ли способ, который сохраняет историю этих файлов / этой папки?Или мне придется заново представить текущее состояние этих файлов в другой ветви (т.е. начать с нуля)?

Примечание: есть несколько сотен противоречивых изменений между кончиками обеих ветвей.Вот почему я ищу альтернативу полноценному слиянию ветвей (что также будет проблемой, потому что одна из ветвей перестанет существовать после слияния).

1 Ответ

2 голосов
/ 12 февраля 2011

Ртутный трансплантат extensio n должен добиться цели.Transplant повторно применяет набор изменений к выбранной вами ветви.Он обычно используется как способ перемещения исправления ошибки из одной ветви в другую (т. Е. Из некоторой длительно работающей ветви, соответствующей выпущенной версии кода, в активно разработанную ветку по умолчанию).

Трансплантат распространяется сMercurial, но вам, возможно, придется включить его, добавив следующие строки в ваш Mercurial.ini (или .hgrc):

[extensions]
transplant=

Из TortoiseHg вы можете обновить набор изменений назначения (то есть: где вы размещаетеисправления), а затем щелкните правой кнопкой мыши на наборе изменений, который вы хотите переместить, и выберите «Пересадка на локальный».Справку командной строки можно найти по ссылке выше.

Одно предупреждение: трансплантат применяется к наборам изменений, и он хочет применить весь набор изменений.Таким образом, если набор изменений содержит некоторые изменения, которые вы хотите применить, а некоторые нет, вам придется проделать немного больше работы.Один из способов обойти это - использовать расширение histedit и разбить такой набор изменений на две части.Это может быть сложно, и не рекомендуется, если ваш репозиторий не содержит локально (то есть: если он где-то на сервере).Опция грубой силы - это пересадить набор изменений, а затем просто отменить нежелательные изменения и зафиксировать эти моды в качестве второго набора изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...