我们正在使用 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
”)时,它只会处理 Web
和 Libraries
目录。另请阅读 sparse directories .
关于svn - 用于分支共享库(并保持理智)的存储库布局(或 Hook ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1400199/