Это возможно путем объединения двух репозиториев:
Преобразование в новый репозиторий с файловой картой, которая отфильтровывает все, кроме интересующего вас файла. Есть хорошее описаниена hgtip.com .
echo include my-file > filemap
hg convert --filemap sourcerepo temprepo
Вставьте новый репозиторий в существующий репозиторий.Это создаст совершенно новую голову, которая не происходит из какой-либо предыдущей ревизии.Это также описано более подробно на hgtip.com .
cd destrepo
hg pull --force temprepo
Наконец, объедините новую головку.
hg merge
Вот пример из командной строки.Сначала мы создаем исходный репозиторий:
$ mkdir sourcerepo
$ cd sourcerepo
$ hg init
$ echo aaa > a
$ echo bbb > b
$ hg add a b
$ hg commit -m first
$ echo xxx > a
$ echo yyy > b
$ hg commit -m second
Затем мы создаем файловую карту и конвертируем ее во временный репозиторий, содержащий только нужный файл:
$ cd ..
$ echo include a > filemap
$ hg convert --filemap filemap sourcerepo temprepo
initializing destination temprepo repository
scanning source...
sorting...
converting...
1 first
0 second
$ hg glog temprepo/a
@ changeset: 1:a2c44f396733
| tag: tip
| user: Laurens Holst <...>
| date: Fri Oct 21 13:02:53 2011 +0200
| summary: second
|
o changeset: 0:68090379058b
user: Laurens Holst <...>
date: Fri Oct 21 13:02:41 2011 +0200
summary: first
Теперь мы создаем место назначенияхранилище:
$ mkdir destrepo
$ cd destrepo
$ echo zzz > z
$ hg add z
$ hg commit -m another
$ hg glog
o changeset: 0:890b51ba85c6
tag: tip
user: Laurens Holst <...>
date: Fri Oct 21 13:15:51 2011 +0200
summary: another
Наконец, мы извлекаем изменения из временного хранилища и объединяем его:
$ hg pull --force ../temprepo
pulling from ../temprepo
searching for changes
warning: repository is unrelated
requesting all changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m "merge file a from sourcerepo"
$ ls
a z
$ hg glog
@ changeset: 3:7becd66c019a
|\ tag: tip
| | parent: 0:890b51ba85c6
| | parent: 2:dc9ac503efba
| | user: Laurens Holst <...>
| | date: Fri Oct 21 13:39:51 2011 +0200
| | summary: merge file a from sourcerepo
| |
| o changeset: 2:dc9ac503efba
| | user: Laurens Holst <...>
| | date: Fri Oct 21 13:02:53 2011 +0200
| | summary: second
| |
| o changeset: 1:2a5fa6bd9021
| parent: -1:000000000000
| user: Laurens Holst <...>
| date: Fri Oct 21 13:02:41 2011 +0200
| summary: first
|
o changeset: 0:890b51ba85c6
user: Laurens Holst <...>
date: Fri Oct 21 13:15:51 2011 +0200
summary: another
Теперь ваш файл из исходного хранилища объединяется с целевым хранилищем при сохранениився история изменений!