我注意到这种功能存在于颠覆中,并且效果很好。我想知道 SourceGear Vault 是否有这样的东西。
1 回答
不,恐怕我们只有Subversion和Git的双向桥梁。我还没有听说有人为 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
我希望本指南可以帮助您或其他人!:-)