Когда у меня есть две ветки в реестре Hg, как объединить только один файл с другой ветвью, не имея слияния всех других файлов из набора изменений?
Можно ли объединить только определенные файлы вместо целого набора изменений?
Когда у меня есть две ветки в реестре 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
По какой-то причине я и некоторые из моих коллег находят это ОЧЕНЬ запутанным. "revert" == "copy"... имеет смысл для некоторых шаблонов использования, но не для всех.
Неа. 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 =