在我的公司我们正在使用一个SVN储存库的保持我们C++编码。代码基本是由一个共同的部分(基础设施和应用程序),以及客户的项目(开发作为的插件).

储存库的布局是这样的:

  • 基础设施
  • App1
  • 2
  • App3
  • 项目于客户机-1
    • App1-插件
    • 2-插件
    • 配置
  • 项目于客户机-2
    • App1-插件
    • 2-插件
    • 配置

一个典型的释放客户的项目包括项目的数据和每一个项目,使用由它(例如基础设施)。

实际布局的每一个目录是-

  • 基础设施
    • 树枝
    • 标签
    • 树干
  • 项目于客户机-2
    • 树枝
    • 标签
    • 树干

并且这同样适用于其余的项目。

我们有几个问题的布局:

  1. 这很难开始一个新的发展环境中为客户的项目,由于一个已结算所有的参与的项目(例如:基础设施,App1、2、项目为客户机-1).
  2. 它是困难的标记的释放在客户的项目,对于同样的原因,如上。
  3. 在情况的客户的项目需要改变一些共同的代码(例如基础设施),我们有时使用的一个分支。很难跟踪其分支机构都使用的项目。

是否有任何方式在SVN解决的任何上面?我以为使用svn:在外部客户的项目,但在阅读 这个职位 我明白它可能不是正确的选择。

有帮助吗?

解决方案

你可以处理这与svn:外部对象。这是url到一个点,在一个svn仓库 这可以让你拉的部分地区的一个不同的仓库(或相同)。一种方法来使用这个是在项目为客户端2,添加一个svn:外部的链接分的基础设施的需要,支app1你需要等。所以当你检查了项目为客户端2,你得到所有的正确的碎片。

Svn:外部的链接进行版本控制及其他一切,以项目为客户端1得到加标记,支,并更新了正确的外部支总是会得到拉。

其他提示

一个建议是改变布局目录

  • 基础设施
    • 树枝
    • 标签
    • 树干
  • 项目于客户机-1
    • 树枝
    • 标签
    • 树干
  • 项目于客户机-2
    • 树枝
    • 标签
    • 树干

  • 树枝
    • 特-1
      • 基础设施
      • 项目于客户机-1
      • 项目于客户机-2
  • 标签
  • 树干
    • 基础设施
    • 项目于客户机-1
    • 项目于客户机-2

有一些问题与这个布局。分支机构成为巨大的,但它至少更容易标签特定的地方,在你的代码。

工作用的代码,就只是结帐的躯干和工作。然后你不需要剧本,检查了所有的不同的项目。他们只是参考基础设施"../基础设施"。另一个问题与这种布局,你需要签几个拷贝如果你想工作,在项目完全独立。否则改变基础设施的一个项目可能会导致另一个项目不要汇编到更新。

这可能会使释放一个小小的更多繁琐的过,并分离的代码不同的项目。

是啊,这太糟了。我们做同样的事情,但是我真的不能认为一个更好的布局。

所以,我们是一组脚本,可以自动颠复一切相关。每个客户的项目将包含一个文件叫 project.list, ,其中包含所有的颠复项目/途径,需要建立客户。例如:

Infrastructure/trunk
LibraryA/trunk
LibraryB/branches/foo
CustomerC/trunk

每个脚本后看起来是这样的:

for PROJ in $(cat project.list); do
    # execute commands here
done

那里的命令可能是一个结帐,更新或标签。它是一个比较复杂,但这并不意味着一切都是一致的,检查、更新和标签成为一个单一的命令。

当然,我们试图分支尽可能少,这是最重要的建议,我可能可以做到的。如果我们需要支的东西,我们将努力工作的主干,或先前标记的版本作为许多依赖关系作为可能。

第一,我不同意外部都是邪恶的。虽然他们不是完美的。

在那一刻,你做的多次检出建立一个工作副本。如果你使用外部会正是这样做的,但会自动和一贯的每一个时间。

如果你点你的外部标记(或具体的修订版)内的目标的项目中,你只需要签的当前项目的每释放(如标签表明究竟是什么外你是指向的).你还会有记录在项目的确切时间你改变了你的外部参考文献使用的新版本的一个特别图书馆。

外部不是灵丹妙药和以后表示有可能出现问题。我敢肯定有更好的东西比外部,但是我还没找到呢(甚至在概念上).当然,结构你使用可能产生大量的信息和控制在发展过程中,使用外部可以添加到这一点。然而,该问题,他已经不是根本的腐败问题-干净得到解决的一切,和是非常罕见(你真的是无法创建一个新的分支图书馆在repo?).

考虑要点使用递归的外部对象。我是不出售的是或不是的这和倾向于以务实的方法。

考虑使用活塞的文章表明,我没有看到它在行动所以真的不能评论,这可能会做同样的工作,作为外部对象在一个更好的办法。

从我的经验,我认为这是更有用有一个储存库对每个单独项目。否则你有问题你说和另外,修正的数字变化如果其他项目改变可能造成混淆。

只有当有关系的个别项目,例如软件、硬件的原理图、文件等。我们用一个单一的储存库这样的修订数量有助于得到整个组向一个已知的状态。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top