По сути, я хочу попробовать перенести ревизии hg из ветви экспериментального репо в клон mainline.Но я хочу отбросить имя ветки, чтобы я мог сразу перейти к основному репо на стороне сервера.Вероятно, лучше привести простой пример:
hg init hg_mainline
pushd hg_mainline
touch foo
hg add foo
hg commit -m 'foo'
popd
hg clone hg_mainline hg_experimental
pushd hg_experimental
hg branch bar_branch
touch bar
hg add bar
hg commit -m 'bar'
popd
pushd hg_mainline
hg pull ../hg_experimental
hg log
Как вы можете видеть, основная линия теперь включает в себя оборот с "branch: bar_branch".Я не хочу, чтобы у этой ревизии была ветвь (т.е. она должна быть по умолчанию).
Это нормально, если для этого потребуется переписать историю с rebase , трансплантатом ,или другой инструмент.Я попробовал оба из них, но не мог заставить это работать.Хэш последней редакции может в конечном итоге различаться для двух репозиториев.
Поэтому я хочу, чтобы верхняя ревизия hg_mainline выглядела так:
changeset: 1:xxxxxxxxxxxx
tag: tip
user: ...
date: ...
summary: ...
без именованной ветви.
Опять же, все в порядке, если хеш не сохранен из hg_experimental.
В настоящее время я использую hg 1.6.2 + 55-18e1e7520b67 из Ubuntu PPA.
EDIT:
Я тоже использовал 1.3.1.Я протестировал ниже оба, и результаты здесь одинаковы.
Я работал с трансплантатом, но только с grep -v
кладжем.
hg transplant -s ../hg_experimental 1 --filter "grep -v '^branch:'"
С:
hg transplant -s ../hg_experimental 1
hg экспорт тоже не работал, с или без соответствующего grep.
Патч ревизии выглядит так:
# HG changeset patch
# User Matthew Flaschen <EMAIL>
# Date 1282942390 14400
# Branch bar_branch
# Node ID b8e36efea72642f0a0194301489d5c48f619a921
# Parent 85d9b9773d4ec09676dfcc4af89c142c46279444
bar
Я экспортировал из эксперимента с:
hg export 1 -o '/tmp/%b_%H_%R'
и попытался импортировать в магистраль с помощью:
hg import /tmp/hg_experimental_b8e36efea72642f0a0194301489d5c48f619a921_1
Сбой:
abort: no diffs found
РЕДАКТИРОВАТЬ 2:
Как отмечалось,метод экспорта не удался только потому, что файлы были пустыми.Он корректно работает с --git
или с непустыми файлами.