是否可以使用Mercurial从/推送到SourceGear Vault存储库?

时间:2010-07-09 04:52:14

标签: mercurial dvcs sourcegear-vault

我注意到subversion存在这种功能,而且效果非常好。我想知道SourceGear Vault是否有这样的东西。

1 个答案:

答案 0 :(得分:11)

不,我担心我们只有SubversionGit的双向桥梁。我没有听说有人为SourceGear Vault编写桥梁。

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

从外部版本控制系统中查看最新版本的代码。初始化Mercurial存储库,添加所有文件并进行提交:

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

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

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

注意:以下安东评论说,如果您使用命名分支来分隔两行开发,那么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'

您继续这样工作 - 始终在hg分支上进行新的本地开发,并在使用外部VCS命令(更新,提交等)之前始终更新到default分支。

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