在分布式版本控制系统(集市)中开发库

时间:2008-12-10 21:09:20

标签: version-control bazaar

我对集市比较新(主要是使用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必须执行的唯一机制。

3 个答案:

答案 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)

您不希望任何新库拥有自己的解决方案并构建为其中的一部分,然后由其他项目引用。这样,库只构建了一个版本(而不是每个解决方案一个)