我注意到subversion存在这种功能,而且效果非常好。我想知道SourceGear Vault是否有这样的东西。
答案 0 :(得分:11)
不,我担心我们只有Subversion和Git的双向桥梁。我没有听说有人为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
分支。
我希望本指南可以帮助您或其他人! : - )