如果库B和C必须 子目录A项目做什么,如果我要开始一个项目d是 使用图书馆B I 做,但不以其他方式 与项目A在所有下属?
任何项目都可以存在两种独立和如在同一时间的另一项目的subrepository。我会通过建议工作流程来解释。
首先,每个项目(A,B,C)中必须存在某处发表了祝福库:
你可以在自己的服务器上运行hgwebdir,或使用的Mercurial托管服务,如Bitbucket或Kiln。通过这种方式,开发人员拥有一个中心授权点来提取/推送更改,并且您可以进行备份。
现在你可以让这些存储库的克隆两种不同的方式上工作:
直接克隆项目。例如:
hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB
和/或通过把一个.hgsub
文件中的ProjectA
根与以下内容创建subrepository定义:
libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB
libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC
这些subrepository定义告诉水银说每当项目A被克隆时,它也必须将库B和库C的克隆放入libraries
文件夹中。
如果您在项目A中工作并提交,那么您的更改将在libraries/LibraryB
和libraries/LibraryC
之间进行。 Mercurial将记录项目A在.hgsubstate
文件中正在使用哪个版本的库。结果是,如果你在hg update
的旧版本的项目上看到了上周的工作情况,那么你也可以得到相应版本的库。您甚至不需要制作标签:-)
当您将hg push
项目A更改为有福的存储库时,Mercurial还会确保将子备份更改首先推送到其原始位置。这样您就不会意外发布取决于未发布的库更改的项目更改。
如果您希望将所有内容保留在本地,则仍然可以通过使用相对路径而不是子版本库定义中的URL来使用此工作流程。
您在末尾提到的库文件夹在哪里,“这些子库定义告诉mercurial,无论projectA被克隆,它还必须将LibraryB和LibraryC的克隆放入库文件夹中。” – LachlanG 2010-12-16 11:44:51
它只是一个文件夹,左边的部分是:libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB是右边的克隆应该是 – 2010-12-16 13:57:45
@LachlanG:它会出现在ProjectA的根目录克隆,例如'C:\ Dev \ ProjectA \ libraries \'。 – 2010-12-16 16:11:29