svn - 用于分支共享库(并保持理智)的存储库布局(或 Hook )

标签 svn version-control tortoisesvn shared-libraries

我们正在使用 subversion,(这个问题可能适用于许多版本控制系统,但 subversion 是我真正关心的一个。)

我们的存储库布局如下所示:

(布局 A)

Web
  branches
  tags
  trunk
Libraries
  Foo
    branches
    tags
    trunk
  Bar
    branches
    tags
    trunk
WindowsClient
  branches
  tags
  trunk
DB
  branches
  tags
  trunk

问题是版本控制单元不等于开发单元——我必须进行多次 check out 才能获得可构建的工件,而当我分支时,我必须对多个组件进行分支(并在多个地方 checkin 。)

这意味着我们可以改为使用这样的结构:

(布局 B)
Web
  branches
  tags
  trunk
    main
    libs
      Foo
      Bar
    DB
WindowsClient
  branches
  tags
  trunk
    main
    libs
      Foo
      Baz
    DB

但是我们有任何共享库的重复副本。我们可以使用 svn:externals 映射共享库,但这只是一种错觉——当包含项目时,它们不会被分支。

最后一个选项是这样的:

(布局 C)
branches
tags
trunk
  Web
  Libraries
    Foo
    Bar
  WindowsClient
  DB

这可以确保库与其包含的项目一起分支,但代价是分支单位是整个世界。 (这也意味着结账的单位是整个世界,这也很烦人。)

我想要的是存储库布局 (布局 D)这让我可以:
  • 一次性分支一个项目及其依赖库
  • 在项目之间共享库

  • 如果我可以在一次结帐中检查项目及其库,那就太好了,但这并不像上述那样重要。

    所以问题是:

    是否有布局 D,它是什么,以及如何使用它?

    编辑:由于似乎没有基本布局可以为我提供这些属性,因此我对某种 Hook 函数非常感兴趣,可以让我到达那里。如果它可以与 TortoiseSVN (Windows GUI) 客户端一起使用会特别好,因为那是我们正在使用的。

    最佳答案

    选择选项 C,然后像这样进行结帐:

    svn co -N ...../branches/mybranch workingcopy
    cd workingcopy
    svn update Web Libraries
    

    现在,当您执行 svn 操作(包括普通的“svn update”)时,它只会处理 WebLibraries目录。

    另请阅读 sparse directories .

    关于svn - 用于分支共享库(并保持理智)的存储库布局(或 Hook ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1400199/

    相关文章:

    xcode - 比较修订版本时 SVN 访问被拒绝

    svn - 如何在p4merge中设置文件标签

    svn - 如何使用Subversion一次提交多个目录?

    version-control - 使用 Subversion 而不是 MS Source Safe 的原因

    c# - 源代码管理中的项目引用路径?

    version-control - 是否可以从本地文件系统获取TFS更改集编号?

    svn - 使用 SVN 管理开发和生产服务器之间的配置文件差异

    URL 之间的 SVN 复制失败

    svn - TortoiseSVN:为什么我不能将外部(项目)添加到我的工作副本的 ROOT 中?

    azure - 如何将azure存储blob容器设置为TortoiseSVN可访问的SVN存储库