在更改我的项目的VC时 假的 从SVN到Mercurial在Google Code上,我有点渴望(我很有趣)。我所做的只是检查SVN的最新版本,然后将结帐作为新的Mercurial Repo的首次修订。显然,所有历史都丢失了。

稍后,当变得更好地构成了Mercurial时,我意识到有一个“转换扩展”的东西,使您可以将SVN存储库转换为Mercurial Repo。现在,我要做的是转换旧的SVN储备金,然后将所有更改集与当前现有的Mercurial repo导入到此转换的存储库中 除了 第一个致力于梅里尔。

我已经将SVN存储库转换为当地的Mercurial仓库,但现在是我卡住的时候。我认为我能够使用转换扩展名将当前的Mercurial存储库带入转换后的存储库,并在剪接图中删除第一个提交,但我似乎无法使它起作用。

我还尝试仅使用convert convert nons splice映射,以将当前的mercurial回购中的所有更改集获取到转换后的一个,然后将当前的第二个版本重现为旧的SVN存储库的最后一个提交,但我无法获得也可以工作。

为了说明我有这两个存储库:

A: revA1-revA2
B: revB1-revB2-revB3 (Where revB1 is actually a copy of revA2)

现在,我想将这两个组合到包含以下方式的新存储库中:

C: revA1-revA2-revB2-revB3
有帮助吗?

解决方案

只要您更改新修订的哈希(您是),您也可以使用 exportimport (或者 transplant 命令是两者周围的包装器)。

您已经进行了转换,这很棒,现在进入repo b并做:

hg export -o 'changeset-%R.patch' 1:tip

这将为Repo B中的每个更改集创建一个更改表 - ##。补丁程序,除了第一个(编号为零)。

现在转到repo c并导入它们:

hg import $(ls *.patch | sort -V)

如果确实确实是Reva2和RevB1相同的话,那应该都应该干净地适用。

其他提示

您可以使用“ HG Pull -Force”的无关存储库进行更改

这是一个简单的用法示例:

设置测试目录

C:\temp>mkdir hgtest
C:\temp>cd hgtest
C:\temp\hgtest>mkdir a
C:\temp\hgtest>mkdir b
C:\temp\hgtest>mkdir c

使存储库a

C:\temp\hgtest>cd a
C:\temp\hgtest\a>hg init
C:\temp\hgtest\a>echo line one >> file.txt
C:\temp\hgtest\a>hg add file.txt
C:\temp\hgtest\a>hg ci -m "check in one"
C:\temp\hgtest\a>echo line two >> file.txt
C:\temp\hgtest\a>hg ci -m "check in two"
C:\temp\hgtest\a>echo line three >> file.txt
C:\temp\hgtest\a>hg ci -m "check in three"

制作存储库b

C:\temp\hgtest\a>cd ..\b
C:\temp\hgtest\b>copy ..\a\file.txt file.txt
C:\temp\hgtest\b>hg init
C:\temp\hgtest\b>hg add file.txt
C:\temp\hgtest\b>hg ci -m "check in b one"
C:\temp\hgtest\b>echo line four >> file.txt
C:\temp\hgtest\b>hg ci -m "check in b two"
C:\temp\hgtest\b>echo line five >> file.txt
C:\temp\hgtest\b>hg ci -m "check in b three"

将存储库C作为A首先作为A的克隆,然后从B中拉动更改

C:\temp\hgtest\b>cd ..\c
C:\temp\hgtest\c>hg clone C:\temp\hgtest\a .
C:\temp\hgtest\c>hg pull --force C:\temp\hgtest\b
C:\temp\hgtest\c>hg merge
C:\temp\hgtest\c>hg ci -m "check in c one"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top