Переместить файлы через суб-репо в Mercurial - PullRequest
4 голосов
/ 20 октября 2011

Кто-нибудь знает, как перемещать файлы по всем направлениям при сохранении истории файла

Я использую hg mv /Product/common/modules/sub-repo1/scripts/filename /Product/common/modules/sub-repo2/scripts/filename

Product - это репозиторий уровня оболочки, а sub-repo1 иsub-repo2 являются суб-репо

Выдает ошибку отмены /Product/common/modules/sub-repo2/scripts/filename not under root ..

Ответы [ 2 ]

7 голосов
/ 21 октября 2011

Это возможно путем объединения двух репозиториев:

  1. Преобразование в новый репозиторий с файловой картой, которая отфильтровывает все, кроме интересующего вас файла. Есть хорошее описаниена hgtip.com .

    echo include my-file > filemap
    hg convert --filemap sourcerepo temprepo
    
  2. Вставьте новый репозиторий в существующий репозиторий.Это создаст совершенно новую голову, которая не происходит из какой-либо предыдущей ревизии.Это также описано более подробно на hgtip.com .

    cd destrepo
    hg pull --force temprepo
    
  3. Наконец, объедините новую головку.

    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

Теперь ваш файл из исходного хранилища объединяется с целевым хранилищем при сохранениився история изменений!

3 голосов
/ 20 октября 2011

Вы не можете сделать это.

Вам необходимо сделать это в следующих шагах:

  1. Скопировать файл из одного хранилища в другое, используя обычные инструменты файловой системы
  2. Добавьте его в новый репозиторий через hg add
  3. Удалите файл из старого репозитория через hg remove

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

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

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