我有整个SVN存储库的工作副本,但由于磁盘空间问题,我想将其更改为稀疏的工作副本。
这样做的一种方法是:
svn up --set-depth immediates projects
svn up --set-depth infinity projects/project1
svn up --set-depth infinity projects/project2
但是,首先会删除project1
和project2
,然后重新下载它们。这真的很不方便,因为它们非常大,服务器的上传速度非常低。我试过这个(用另一个,更小的部分回购,作为实验):
svn up --set-depth infinity projects/project1
svn up --set-depth infinity projects/project2
svn up --set-depth immediates projects
但是最后一个命令只撤消了前两个命令。
如何在没有立即更新/更改工作副本的情况下设置工作副本的深度,这样我就有机会首先正确配置子目录?
还是有另一种方法可以实现我想要的,例如首先将project1
和project2
复制到安全的位置?
答案 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
*。projects
和project1
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中似乎不可能,因为元数据格式看起来不同。
这是我最终做的事情(在你的情况下使用目录)。首先,我将project1
和project2
复制到安全的地方。
svn co --depth immediates svn_url/projects
这会检查projects
空目录project1
和project2
。然后我删除空文件夹并将实际目录放在它们的位置。 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>