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

标签 mercurial dvcs sourcegear-vault

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

最佳答案

不,恐怕我们只有 Subversion 的双向桥梁和 Git .我还没有听说过有人为 SourceGear Vault 编写桥接器。

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

从您的外国版本控制系统中 check out 最新版本的代码。初始化 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分支, merge 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 中进行更改时,您必须将它们 merge 回您的 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 step 确保 Mercurial 获取在外部 VCS 中发生的任何重命名。您将需要试验相似性参数以找到适合您的设置。使用 hg status -C查看预定的重命名。

您现在需要将这些更改 merge 回 hg分支,以便您可以将它们 merge 到您进一步的基于 Mercurial 的工作中:
$ hg update hg
$ hg merge default
$ hg commit -m 'Merge with default'

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

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

关于mercurial - 是否可以使用 Mercurial 从/推送到 SourceGear Vault 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209923/

相关文章:

macos - 默认情况下在哪里存储 hg 扩展名?

mercurial - 如何将新功能推送到中央 Mercurial 仓库?

git - 任何使用浏览器内代码编辑器(如 Google Code)托管的项目?

sourcegear-vault - 您对Sourcegear Vault有何看法?

testing - buildbot 没有将 mercurial 更新到 forcebuilds 的最新负责人

mercurial - 如何设置 Mercurial "server"允许在没有 apache 的情况下进行身份验证推送?

dvcs - Fossil:在一个命令中删除丢失的文件?

svn - Subversion 与 Vault

vb6 - 如何修复我的源代码绑定(bind)?

mercurial - TortoiseHg设置>提交中的 "default"和 "default-push"有什么区别?