我对集市比较新(主要是使用cvs,然后是颠覆,在我目前的工作中我们使用的是SourceUnsafe)。我目前的开发环境结构如下:
\dev (shared repository) \trunk \project1 (branch) \project2 (branch) \branches \proj1-bugfix123 (branch of \trunk\project1) \proj1-featureA (branch of \trunk\project1)
现在,如果我认为project1的某些方面更适合作为库(或程序集,因为它是ac #project)而不是项目中的类,最好的方法是构建这个在集市上。我想出了两种我认为可行的可能性。我认为首先是“正确”的方式。
\dev (shared repository) \trunk \project1 (branch) \project2 (branch) \libXXX \branches \proj1-bugfix123 \main (branch of \trunk\project1) \libXXX (branch of \trunk\libXXX) \proj1-featureA \main (branch of \trunk\project1) \libXXX (branch of \trunk\libXXX)
问题在于,现在我需要记住更新解决方案文件,以便在我创建分支时包含正确的项目,并且不要将其推回去,并且还要记住将更改推回到项目和库中同时(例如,如果project1中的featureA需要更改libXXX才能工作)。
\dev (shared repository) \trunk \project1 (branch) \project2 (branch) \libXXX \branches \proj1-bugfix123 (branch of \trunk\project1) \libXXX \proj1-featureA (branch of \trunk\project1) \libXXX
这种方法存在的问题是,如果另一个项目,比如project3想要使用libXXX并且在源代码控制中,那么它需要是project1的一个分支,并删除了project1文件。这会很混乱。
我认为第三种选择是让整个树干成为颠覆中的一个分支,但这似乎与我认为它们应该在集市上工作的方式相反。
如果这是在SourceSafe中完成的,我会像第二个例子那样做,但是在两个地方都有libxxx文件夹,但是共享,因为这是sourcesafe必须执行的唯一机制。
答案 0 :(得分:3)
bzr还没有简单的解决方案。您需要嵌套树支持,但尚未实现(http://bazaar-vcs.org/NestedTreeSupport),但可能很快就会实现。
有一个名为config-manager(https://launchpad.net/config-manager)的旧工具。
另外还有一个名为scmproj(https://launchpad.net/bzr-scmproj)的bzr新插件,它现在处于alpha状态并处于正在开发状态。
答案 1 :(得分:1)
直到Bazaar中的嵌套树支持被修复,或者Bazaar开发类似于Subversion'External'的东西(如果我理解正确的话),你将库包含在Bazaar分支树中的灵活性是有限的。
在此之前,将库作为一个单独的项目维护在一个漂亮干净的“分支”中。如果您需要项目中包含的库(例如其文件)位于项目自己的树中,则将它们复制到一起。如果对该库中要返回库中的文件进行任何更改,请将更改带回该库的本地分支并在那里进行合并/提交。
答案 2 :(得分:0)
您不希望任何新库拥有自己的解决方案并构建为其中的一部分,然后由其他项目引用。这样,库只构建了一个版本(而不是每个解决方案一个)