SVN检出深度

51
我有一个如下结构的 SVN 项目:

I have an SVN project with tree like this:

/project
    /dir1
        /subdir1
           -file1
           -file2
            .....
        -file1
        -file2
        .....
    /dir2
        -file1
        -file2
        .....
    /dir3
        /subdir1
           -file1
           -file2
            .....
        /subdir2
           -file1
           -file2
            .....
        /subdir3
           -file1
           -file2
            .....
        /subdir4
           -file1
           -file2
            .....
    /dir4
        -file1
        -file2
        .....
-file1
-file2

我需要从 /project 检出所有文件,以及完整地检出 /dir1、/dir2 和 /dir4 文件夹,但是只需要从 /dir3 中检出 /subdir1 和 /subdir3 文件夹。请问是否可以使用 svn 命令行来完成这些文件和文件夹的检出?如果可以,应该如何操作?检出后是否可以将 subdir2 添加到 dir3 中?如何更新已创建的工作副本?是否可以通过正常的 "svn up" 命令仅更新这些文件夹,而不是对整个项目执行全量更新?

2个回答

82

你需要的是称为sparse checkout的功能。

在你的情况下,你可以:

svn co --depth files file:///project project
cd project
svn up --set-depth infinity dir1 dir2 dir4
svn up --set-depth empty dir3
svn up --set-depth infinity dir3/subdir1 dir3/subdir3

我可以在checkout之后将subdir2添加到dir3吗?

可以:svn up --set-depth infinity dir3/subdir2

以这种方式创建的工作副本如何更新?正常的 "svn up" 命令只会更新这些文件夹还是会执行完整的项目更新?

是的,svn up 只会更新这些文件和文件夹,即更新深度将得到保留。


非常感谢。所以如果我理解正确,如果项目中添加了一个新文件夹(例如dir5),它将不会被更新。是吗? - Pablo notPicasso
是的,dir5 的父文件夹深度设置为“files”,因此新文件将被更新,但不包括新文件夹。 - ks1322
3
如果你想自动添加新的一级子目录,使用 --depth immediates 而不是 --depth files 应该可以解决问题。 - Frank Schmitt
现在我知道我过去做错了什么 - 我在你的例子中再次使用了 co 而不是 up,谢谢。 - Betlista
刚刚发现,如果你尝试更新的目录是使用“--depth immediates”创建的(因为它的深度属性设置为空,可以通过“svn info”查看),则需要使用“--set-depth”。 - Apteryx

1
  1. svn up --set-depth empty 文件/文件夹路径
  • => 它将从您的系统中删除该文件**
  1. svn up --set-depth infinity 文件/文件夹路径
  • => 它将从 SVN 服务器重新生成文件到您的本地系统**

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接