7

我注意到这种功能存在于颠覆中,并且效果很好。我想知道 SourceGear Vault 是否有这样的东西。

4

1 回答 1

11

不,恐怕我们只有SubversionGit的双向桥梁。我还没有听说有人为 SourceGear Vault 写过桥。

但是,您仍然可以在其他系统之上使用 Mercurial。这是适用于所有版本控制系统 (VCS) 的通用技术。您所做的是以下内容:

从您的外国版本控制系统中签出最新版本的代码。初始化 Mercurial 存储库,添加所有文件并提交:

# checkout foreign VCS
$ hg init
$ hg addremove
$ hg commit

工作副本现在既是 Mercurial 工作副本,也是外部系统的工作副本。您将在 Mercurial 中进行开发并定期将其导入外部系统,并且您将定期将来自外部 VCS 的更改导入 Mercurial。

我们将使用被调用的分支default来跟踪外部系统的历史,并使用被调用的分支hg来跟踪我们在 Mercurial 中所做的开发。

注意:下面的 Anton 评论说,如果您使用命名分支来分隔两条开发线,Vault 将显示太多文件——如果这对您来说是个问题,请使用两个克隆。

让我们创建hg分支:

$ hg branch hg
$ hg commit -m "Started hg branch"

你现在可以开发一些东西:

# work, work, work...
$ hg commit -m 'Fixed bug 42'
# work, hack, work...
$ hg commit -m 'Customers will love this feature!'

当您像这样工作时,default分支将开始与hg分支分离——不同之处在于尚未导出到外部系统的更改。你可以看到差异

$ hg diff default:hg

要实际导出更改,您更新到default分支,合并hg到其中并将更改提交到您的外部系统:

$ hg update default
$ hg merge hg
$ hg commit -m 'Merge with hg'
# get list of renamed files:
$ hg status --added --copies --change . | grep -A 1 '^ '
# commit to foreign VCS

然后您可以更新回hg分支并继续使用 Mercurial

$ hg update hg
# work, work, wok...

当其他人在外部 VCS 中进行更改时,您必须将它们合并回您的hg分支。您首先更新到default分支。这确保了工作副本看起来像外部 VCS 期望的样子。然后您可以更新工作副本——这会使 Mercurial 看到您提交给 Mercurial 的更改:

$ hg update default
# update working copy using foreign VCS
$ hg addremove --similarity 90
$ hg commit -m 'Imported changes from foreign VCS'

hg addremove步骤确保 Mercurial 获取在外部 VCS 中发生的任何重命名。您将需要试验相似性参数以找到适合您的设置。用于hg status -C查看计划的重命名。

您现在需要将这些更改合并回hg分支,以便您可以将它们合并到您进一步基于 Mercurial 的工作中:

$ hg update hg
$ hg merge default
$ hg commit -m 'Merge with default'

你继续这样工作——总是在分支上进行新的本地开发,并且总是在使用外部 VCS 命令(更新、提交等)之前hg更新到分支。default

我希望本指南可以帮助您或其他人!:-)

于 2010-07-09T13:51:17.697 回答