如果库 B 和 C 必须是项目 A 的子目录,如果我想启动一个使用库 B 但根本不隶属于项目 A 的项目 D,我该怎么办?
任何项目都可以独立存在,也可以同时作为另一个项目的子存储库存在。我将通过建议工作流程来进行解释。
首先,您的每个项目(A、B、C)都应该有一个发布在某处的受祝福的存储库:
![祝福的存储库](https://i.stack.imgur.com/PtQs6.png)
您可以在自己的服务器上运行hgwebdir ,或者使用像Bitbucket或Kiln这样的 Mercurial 托管服务。这样,开发人员就有了一个中央权威点来拉/推更改,并且您可以进行备份。
现在,您可以克隆这些存储库,以便以两种不同的方式进行操作:
直接克隆你的项目。例如:
hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB
和/或通过将文件放在具有以下内容的根目录中来创建子存储库定义:.hgsub
ProjectA
libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB
libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC
这些子存储库定义告诉 Mercurial,每当克隆项目 A 时,它还必须将库 B 和库 C 的克隆放入libraries
文件夹中。
如果您在项目 A 中工作并提交,那么您在项目 A 中的更改libraries/LibraryB
也libraries/LibraryC
将被提交。Mercurial 将在文件中记录项目 A 正在使用哪个版本的库.hgsubstate
。结果是,如果您hg update
到旧版本的项目查看上周的工作情况,您还将获得相应版本的库。你甚至不需要制作标签:-)
当您hg push
将项目 A 更改为受祝福的存储库时,Mercurial 还将确保首先将子存储库更改推送到它们自己的源。这样您就不会意外发布依赖于未发布库更改的项目更改。
如果您希望将所有内容都保留在本地,您仍然可以通过在子存储库定义中使用相对路径而不是 URL 来使用此工作流程。