是否有人知道如何在保留文件历史记录的同时在suprepos中移动文件
我正在使用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
..
答案 0 :(得分:6)
可以通过拼接两个存储库来实现:
使用filemap转换为新的存储库,该文件图会过滤掉您感兴趣的文件以外的所有内容。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
现在,源存储库中的文件将合并到目标存储库中,同时保留所有更改历史记录!
答案 1 :(得分:3)
你做不到。
您需要按以下步骤执行此操作:
hg add
hg remove
请注意,在此过程中,您将丢失历史记录,因为它将留在旧存储库中,而不会传输到新存储库。如果您需要,还有其他方法涉及通过转换创建仅包含该文件及其历史记录的新存储库,但这是一个不同的主题。
您无法说服Mercurial一次使用多个存储库,因此没有一个命令可以将其从一个存储库传输到另一个存储库。