在不重新下载的情况下更改现有SVN工作副本中的深度

在不重新下载的情况下更改现有SVN工作副本中的深度,svn,sparse-checkout,svn-update,Svn,Sparse Checkout,Svn Update,我有整个SVN存储库的工作副本,但由于磁盘空间问题,我想将其更改为稀疏工作副本 一种方法是: svn up --set-depth immediates projects svn up --set-depth infinity projects/project1 svn up --set-depth infinity projects/project2 但是,这将首先删除project1和project2,然后重新下载它们。这真的很不方便,因为它们非常大,服务器的上传速度非常低。我尝试了这个(

我有整个SVN存储库的工作副本,但由于磁盘空间问题,我想将其更改为稀疏工作副本

一种方法是:

svn up --set-depth immediates projects
svn up --set-depth infinity projects/project1
svn up --set-depth infinity projects/project2
但是,这将首先删除
project1
project2
,然后重新下载它们。这真的很不方便,因为它们非常大,服务器的上传速度非常低。我尝试了这个(作为一个实验,用另一个更小的回购协议的一部分):

但是最后一个命令只是撤销前2个命令

我如何设置工作副本的深度而不立即更新/更改它,以便有机会首先正确配置子目录

或者有没有其他方法来实现我想要的,例如先将
project1
project2
复制到一个安全的位置?

我最终破解了它:

  • 手动编辑
    项目的深度设置为“立即”
  • 硬删除(非SVN删除)
    项目的所有子项
    ,除了
    project1
    project2
  • svn up项目
[*]要执行此操作,请在文本编辑器中打开
projects/.svn/entries
,然后进行更改

b125e325-6f7c-4931-9942-d1ea1ea1441a
X
进入


注意:每次回购时,UUID的外观可能不同,
X
实际上是十六进制值
0x0C
,我无法在此处显示该值。

我也遇到了同样的问题,但您在SVN 1.7中编写的内容似乎不可能,因为元数据格式看起来不同

下面是我最后所做的(在您的情况下使用目录)。首先,我把
project1
project2
复制到安全的地方

svn co --depth immediates svn_url/projects 
这将签出带有空目录的
project1
project2
projects
。然后我删除空文件夹并将实际目录放在它们的位置。SVN给了我一些奇怪的信息,但它似乎工作,并允许我提交。(它不适用于
--depth empty
然后在中复制文件夹,但
立即
似乎有效。)


我同意这种情况并不理想,但这就是为什么我在未来的项目中会选择Git!我已经使用SVN很长一段时间了,但它越来越没有希望了。

呜呼,我遇到了这个问题,而TortoiseSVN支持从稀疏签出中添加和删除项目的解决方案。

1.加入: 在windows资源管理器中,右键单击签出文件夹,然后使用TortoiseSVN?Repo Browser以打开存储库浏览器。找到要添加到工作副本的子文件夹,然后使用关联菜单?将项目更新为修订版

2.删除;
从根目录中,右键单击/Repo Browser/Update item to revision;然后选择“排除”。

没有什么比恢复一个旧的SO问题更好的了

我一直在处理一个非常类似的问题,我从主干分支创建一个发布包,但由于限制,我不得不克隆只针对开发人员的文件

asset
└── js
    └── some
        └── directories
            ├── assets
            │   ├── files ...
            ├── dev       **<------------ This folder needs to be empty**
            │   ├── apis
            │   ├── campaign
            │   ├── features
            │   ├── modules
            │   ├── main.js
            │   └── tags
            └── release
                ├── apis
                ├── data
                ├── features
                ├── modules
                ├── main.js
                └── tags
您基本上是在预先存在的工作副本上运行部分签出,这将在任何级别上运行。在最初的情况下,您只需运行以下命令

svn co --depth immediates ^/branches/mybranch/projects projects
svn co --depth immediates ^/branches/mybranch/project1 project1
svn co --depth immediates ^/branches/mybranch/project2 project2
对于那些不知道插入符号的人来说,
^
是存储库根目录的简写,因此它就像存储库上的相对路径一样工作,有点像
。/some/location


这里的关键是,您没有创建新的工作副本来解决问题。您正在现有工作副本上运行这些命令,并重置所选目录的深度。

我不知道为什么人们在其他答案中会如此艰难

由于Subversion 1.6,可以简单地执行以下操作
svn update——设置深度排除

您不必通过回购浏览器。OrtoiseSVN的上下文菜单有“更新到修订…”选项。只需右键单击排除的文件夹本身,而不是工作目录根。当然,这假定路径中存在存根文件夹(空的排除文件夹)。
asset
└── js
    └── some
        └── directories
            ├── assets
            │   ├── files ...
            ├── dev       **<------------ This folder needs to be empty**
            │   ├── apis
            │   ├── campaign
            │   ├── features
            │   ├── modules
            │   ├── main.js
            │   └── tags
            └── release
                ├── apis
                ├── data
                ├── features
                ├── modules
                ├── main.js
                └── tags
svn co --depth empty ^/branches/releases/latest/asset/js/some/directories/dev \
asset/js/some/directories/dev
svn co --depth immediates ^/branches/mybranch/projects projects
svn co --depth immediates ^/branches/mybranch/project1 project1
svn co --depth immediates ^/branches/mybranch/project2 project2