Pau*_*ius 7 mercurial dvcs sourcegear-vault
我注意到这种功能存在于颠覆中,并且它的工作非常好.我想知道SourceGear Vault是否有这样的东西.
Mar*_*ler 11
不,我担心我们只有Subversion和Git的双向桥梁.我没有听说有人为SourceGear Vault编写桥梁.
但是,您仍然可以在其他系统上使用Mercurial .这是一种适用于所有版本控制系统(VCS)的通用技术.你做的是以下几点:
从外部版本控制系统中查看最新版本的代码.初始化Mercurial存储库,添加所有文件并进行提交:
# checkout foreign VCS
$ hg init
$ hg addremove
$ hg commit
Run Code Online (Sandbox Code Playgroud)
工作副本现在既是Mercurial工作副本,也是外国系统的工作副本.您将在Mercurial中进行开发并定期将其导入到外部系统中,并且您将定期将更改从外部VCS导入Mercurial.
我们将使用被调用的分支default来跟踪外部系统的历史,并使用一个名为的分支hg来跟踪我们在Mercurial中所做的开发.
注意:如果您使用命名分支来分隔两行开发,那么以下安东评论说Vault将显示太多文件 - 如果这对您来说是个问题,请使用两个克隆.
让我们做hg分支:
$ hg branch hg
$ hg commit -m "Started hg branch"
Run Code Online (Sandbox Code Playgroud)
你现在可以开发一些东西:
# work, work, work...
$ hg commit -m 'Fixed bug 42'
# work, hack, work...
$ hg commit -m 'Customers will love this feature!'
Run Code Online (Sandbox Code Playgroud)
当你像这样工作时,default分支将开始偏离hg分支 - 差异正是尚未导出到外部系统的变化.你可以看到差异
$ hg diff default:hg
Run Code Online (Sandbox Code Playgroud)
要实际导出更改,请更新到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
Run Code Online (Sandbox Code Playgroud)
然后,您可以更新回hg分支并继续使用Mercurial
$ hg update hg
# work, work, wok...
Run Code Online (Sandbox Code Playgroud)
当外部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'
Run Code Online (Sandbox Code Playgroud)
该hg addremove步骤确保Mercurial获取在外部VCS中发生的任何重命名.您需要尝试使用相似性参数来查找适合您的设置.使用hg status -C看计划重命名.
您现在需要将这些更改合并到hg分支中,以便您可以将它们合并到基于Mercurial的进一步工作中:
$ hg update hg
$ hg merge default
$ hg commit -m 'Merge with default'
Run Code Online (Sandbox Code Playgroud)
您继续这样工作 - 始终在hg分支上进行新的本地开发,并default在使用外部VCS命令(更新,提交等)之前始终更新到分支.
我希望本指南可以帮助您或其他人!:-)