在mercurial中跨子子仓库移动文件

try*_*est 4 mercurial

有没有人知道如何在保留文件历史记录的同时跨文件移动文件

我在用 hg mv /Product/common/modules/sub-repo1/scripts/filename /Product/common/modules/sub-repo2/scripts/filename

Product是shell水平回购,sub-repo1以及sub-repo2是次回购

它抛出错误中止/Product/common/modules/sub-repo2/scripts/filename not under root..

Lau*_*lst 7

通过将两个存储库拼接在一起是可能的:

  1. 使用filemap转换为新的存储库,该文件映射会过滤除您感兴趣的文件之外的所有内容.在hgtip.com上有一个很好的描述.

    echo include my-file > filemap
    hg convert --filemap sourcerepo temprepo
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将新存储库拉入现有存储库.这将创建一个完整的新头,它不是来自任何先前的变更集.这也在hgtip.com上有更详细的描述.

    cd destrepo
    hg pull --force temprepo
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,合并新头.

    hg merge
    
    Run Code Online (Sandbox Code Playgroud)

这是命令行上的一个示例.首先,我们创建一个原始源存储库:

$ 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
Run Code Online (Sandbox Code Playgroud)

然后我们创建一个文件映射并将其转换为只包含我们想要的文件的临时存储库:

$ 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
Run Code Online (Sandbox Code Playgroud)

现在我们创建一个目标存储库:

$ 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
Run Code Online (Sandbox Code Playgroud)

最后,我们从临时仓库中提取更改并合并它:

$ 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
Run Code Online (Sandbox Code Playgroud)

现在,源存储库中的文件将合并到目标存储库中,同时保留所有更改历史记录!