Меркуриальный:Объединение одного файла между ветками в одном репо

StackOverflow https://stackoverflow.com/questions/1078881

Вопрос

Если у меня есть две ветки в репозитории Hg, как объединить только один файл с другой веткой, не объединяя при этом все остальные файлы из набора изменений?

Можно ли объединить только определенные файлы, а не весь набор изменений?

Это было полезно?

Решение

ПРЕДУПРЕЖДЕНИЕ:такое «фиктивное слияние», рекомендованное @Martin_Geisler, может действительно запутать вас, если позже вы захотите выполнить настоящее слияние двух ветвей.Фиктивное слияние будет записано, и вы скажете, что вы сливаетесь с веткой, в которую вы выполнили фиктивное слияние, — вы не увидите изменений.Или, если вы сольетесь с другой веткой, изменения в этой другой ветке будут отменены.

Если все, что вам нужно, это скопировать весь файл из одной ветки в другую, вы можете просто сделать:

   hg update -r to-branch
   hg revert -r from-branch file
   hg ci -m 'copied single file from from-branch to to-branch

Если вы хотите выбрать разные части этого файла, то "hg record" Полезно.

Я только что сделал это в своем домашнем каталоге .hgignore.

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

   hg update -r to-branch
   branch merge-branch
   hg merge -r from-branch
   hg ci -m 'temp merge to be discarded"
   hg update -r to-branch
   hg revert -r merge-branch single-file
   hg ci -m 'merged single-file from from-branch to to-branch"
   hg strip merge-branch

Стоит упомянуть:способ «копировать один файл между ветвями» (или ревизиями, или из ревизии для слияния, или…) — «hg revert».Т.е.

   hg update -r Where-you-want-to-copy-to
   hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
   ...
   hg ci

По какой-то причине я и некоторые мои коллеги находим это ОЧЕНЬ сбивает с толку."вернуть"=="копировать" ...имеет смысл для некоторых моделей использования, но не для всех.

Другие советы

Неа.Mercurial работает на основе набора изменений.

Но ты можешь сделать "фиктивное слияние", где вы игнорируете входящие изменения из одной из ветвей.Прежде чем совершить фиксацию, вы можете вернуть выбранные файлы в любое желаемое состояние:

% HGMERGE=internal:local hg merge     # keep my files
% hg revert --rev other-branch a.txt  # update a.txt to other branch
% hg commit -m 'Dummy merge to pick a.txt from other-branch.'

Возможно, это вам немного поможет.

Я бы просто использовал внешний инструмент, например vimdiff чтобы сравнить два файла, которые я хочу объединить, а затем объединить их.Преимущество этого в том, что вы можете выборочно редактировать части файла.Например:

hg update -r branch-merging-to
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging

Для этого вам необходимо включить внешние инструменты в вашем .hgrc, что означает просто добавление следующих строк:

[extensions]
hgext.extdiff =  
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top