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

时间:2011-08-28 19:26:46

标签: 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

但是,首先会删除project1project2,然后重新下载它们。这真的很不方便,因为它们非常大,服务器的上传速度非常低。我试过这个(用另一个,更小的部分回购,作为实验):

svn up --set-depth infinity projects/project1
svn up --set-depth infinity projects/project2
svn up --set-depth immediates projects

但是最后一个命令只撤消了前两个命令。

如何在没有立即更新/更改工作副本的情况下设置工作副本的深度,这样我就有机会首先正确配置子目录?

还是有另一种方法可以实现我想要的,例如首先将project1project2复制到安全的位置?

5 个答案:

答案 0 :(得分:26)

呜呜,我遇到了这个问题,TortoiseSVN支持从稀疏结账添加和删除项目的解决方案。 http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

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

2.删除; 从您的根目录右键单击/ Repo-Browser / Update项目到修订版;然后选择“排除”。

答案 1 :(得分:3)

我最终破解了它:

  • projects *。
  • 的深度设置手动编辑为“immediates”
  • projectsproject1
  • 之外的所有project2子项的硬删除(不是SVN删除)
  • svn up projects

[*]为此,请在文本编辑器中打开projects/.svn/entries并更改

b125e325-6f7c-4931-9942-d1ea1ea1441a
X

进入

b125e325-6f7c-4931-9942-d1ea1ea1441a







immediates
X

注意:每个仓库的UUID外观线可能不同,X实际上是十六进制值0x0C,我无法在此处显示。< / p>

答案 2 :(得分:1)

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

这是我最终做的事情(在你的情况下使用目录)。首先,我将project1project2复制到安全的地方。

svn co --depth immediates svn_url/projects 

这会检查projects空目录project1project2。然后我删除空文件夹并将实际目录放在它们的位置。 SVN给了我一些奇怪的消息,但它似乎工作,并允许我提交。 (它不适用于--depth empty,然后复制文件夹,但immediates似乎有用。)

我同意这种情况并不理想,但这就是我为了未来的项目而转向Git的原因!我已经使用SVN很长一段时间了,但它已经超出了希望。

答案 3 :(得分:1)

没有什么比恢复旧的SO问题。

我一直在处理一个非常类似的问题,我从trunk分支创建一个发布包,但由于限制,我必须克隆仅用于开发的文件。

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

我决定排除dev文件以消除在错误目录中的release分支中修补修复的诱惑。

我做了很多稀疏检查,以避免在主干中使用大文件夹,但从未在工作副本上进行回溯。看起来这很简单。

要修改工作副本以使asset/js/some/directories/dev为空,您只需在工作副本上再次运行svn co命令。

在我的情况下,以下作品

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

对于那些不知道插入符号^是存储库根目录的缩写,所以它就像存储库中的相对路径一样,有点像../some/location

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

答案 4 :(得分:0)

在其他答案中,我不知道为什么人们会用困难的方式做事。

自Subversion 1.6起,就可以简单地执行 svn update --set-depth exclude <directory_you_want_to_prune_from_local_working_copy>