使用 Convert 来分解你的库

作者:Thomas G. Willis
日期:2009-11-16

如果你的库已经过度的庞大了,你宁愿包含其中的项目拥有它们自己的库么?可烦人的是,历史记录怎么办呢?

假设你有一个代码库发展为包含了太多的项目(文件夹)。并且你确定你最好将每一个项目(文件夹)分割为一个独立的代码库。你可以使用 convert 扩展来做到并且还保留你的变更历史。

比如,一个库展开来像是这样的:

/yourrepository
    /DatabaseFoo
    /SweetBusinessLogic
    /BaseUI
    /AnotherDamnContentManagementSystem

你已经决定在某个时候 AnotherDamnContentManagementSystem 真的应该归为它自己的代码库中去,并且很久以前你都已经意识到这了,你会发现将它们所有整合到一块作为一个库这对你来说实在是个糟糕的选择,就如同整个版本控制都属于一个超级昂贵的操作时你依然还在使用 Perforce 一样。

幸运的是,convert 扩展能帮你在与风险投资者的会面午餐展示你的工作之前免去这些令人为难的决定。

首先 开启 convert 扩展 :

[extensions]
convert =

convert 命令有一个 --filemap 选项允许你指定在操作中哪些是你想要包含其中的与哪些是你不想要的。你甚至可以进行重命名作为操作的一部分。这个我们要执行操作的 filemap 看起来会像是这样的:

include AnotherDamnContentManagementSystem
rename .

然后你的 convert 命令看起来回事这样:

$ hg convert --filemap myfilemap bigrepo AnotherDamnContentManagementSystem-Repo

就是这样,AnotherDamnContentManagementSystem 现在拥有它自己的 Mercurial 代码库了。