37

我有整个 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

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

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

还是有另一种方法来完成我想要的,例如首先复制project1project2到一个安全的位置?

4

5 回答 5

30

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

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

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

于 2013-03-29T18:46:58.340 回答
3

我最终破解了它:

  • projects手动将*.的深度设置编辑为“立即” 。
  • 硬删除(不是 SVN 删除)projects除了project1project2
  • svn up projects

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

b125e325-6f7c-4931-9942-d1ea1ea1441a
X

进入

b125e325-6f7c-4931-9942-d1ea1ea1441a







immediates
X

注意:每个 repo 看起来 UUID 的行可能不同,X实际上是十六进制值0x0C,我无法在 SO 上显示。

于 2011-08-28T20:05:37.213 回答
1

我有同样的问题,但你写的东西在 SVN 1.7 中似乎不可能,因为元数据格式看起来不同。

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

svn co --depth immediates svn_url/projects 

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

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

于 2012-09-29T01:39:57.303 回答
1

没有什么比恢复一个旧的 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

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

我做了很多稀疏的结帐以避免主干中的大文件夹,但从未在工作副本上回顾过它。看起来这很简单。

要修改工作副本以使其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.

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

于 2017-10-18T08:36:07.520 回答
0

我不知道为什么人们在其他答案中以艰难的方式做事。

从 Subversion 1.6 开始,可以简单地做 svn update --set-depth exclude <directory_you_want_to_prune_from_local_working_copy>

于 2019-03-11T09:00:10.980 回答