存储库组织和选择性结帐

时间:2010-03-17 19:02:49

标签: svn tortoisesvn

我正在使用TortoiseSVN,我有一个以这种方式组织的SVN存储库:

folder1
  folder2
    trunk
    tag
    branches
  folder3
    trunk
    tag
    branches
  folder4
    folder5
      trunk
      tag
      branches

我想知道是否有办法只检出主干目录,将整个树保持在版本控制之下:

folder1
  folder2
    trunk
  folder3
    trunk
  folder4
    folder5
      trunk

通过这种方式,我可以在folder1上使用单个更新命令更新所有中继,而无需更新可能充满数据的标记和分支。

4 个答案:

答案 0 :(得分:3)

这个问题一直困扰着我,我破解了它:)

svn up --set-depth empty branches
svn up --set-depth empty trunk

父目录中对svn update的后续调用不会更新这些目录,也不会调用svn commit

如果你要重新检查一下,你可以:

svn co --depth empty <folder1 svn url>
cd folder1
svn up --depth empty folder2
cd folder2
svn up trunk

然后重复每个folder3folder4

答案 1 :(得分:1)

最接近且最简单的可能是sparse checkouts。那会给你

folder1
  folder2
    trunk
      A
      B
      C
      ...
    tag
    branch
  folder3
    trunk
      A
      B
      C
      ...
    tag
    branch
  folder4
    folder5
      trunk
      A
      B
      C
      ...
      tag
      branch

并且能够一次性更新所有内容。

或者您使用externals执行此操作。在您的存储库中创建一个新文件夹,除了引用其他中继之外什么都不做。

答案 2 :(得分:1)

有两种方法可以做到这一点。

  1. 将不需要的目录切换为空目录。为此,您必须在存储库中的某个位置有一个空目录。然后你先检查整棵树,然后做
  2. svn switch svn://foo/bar/path/to/empty/dir folder1/folder2/tags
    svn switch svn://foo/bar/path/to/empty/dir folder1/folder2/branches
    

    1. 从1.5开始,您可以使用sparse directories

答案 3 :(得分:1)

请注意,稀疏结帐通常是要走的路,但Subversion不允许您与 - reintegrate 选项合并。

这可能听起来像是一个小问题(例如,如果你是单个用户),但你真的应该考虑它并使用适当的存储库结构。

您提到的存储库结构也不允许一次标记或分支所有项目。