我注意到这种功能存在于 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/