SVN:您是否可以从本地签出中删除目录(而不是从存储库中删除)?

Mec*_*cki 47 svn

假设您在subversion控件下有一个目录,其中包含一些文件和大量子目录,如下所示:

file1.txt
file2.txt
file3.txt
dir1/
dir2/
dir3/
dir4/
:
dirXX/
Run Code Online (Sandbox Code Playgroud)

现在你需要文件和一些目录,但不是全部.这可以通过SVN完成.只是使结账非递归:

svn checkout -N <URL>
Run Code Online (Sandbox Code Playgroud)

这只检出第一个目录和里面的文件.没有包含子目录.即使你进入checkout目录并运行" svn up",它只会更新之前检出的文件,它不会添加目录.您现在可以通过显式更新这些目录来有选择地添加所需的目录.例如,如果您只需要dir2和dir4,则可以进入结帐目录并执行

svn up dir2
svn up dir4
Run Code Online (Sandbox Code Playgroud)

如果您svn up将来运行通用" ",它将只更新文件和那两个目录,它不会添加任何其他目录.

现在的问题是:如果我以后再决定我不再需要dir2怎么办?我怎么摆脱它?似乎没有办法这样做,除了删除整个结帐并从头开始.

当你刚删除dir2时,下一个" svn up"将把它带回来,因为" svn status"当然显示它现在缺失("!"在它的名字前面).运行" svn remove"当然会将其删除,但在下一次提交时,它也会将其从存储库中删除,这不会发生.

即使是SVN 1.5的新稀疏目录("浅签出")功能也没用:

Subversion 1.5的浅层检查实现很好,但不支持一些有趣的行为.首先,您无法取消望远镜查看工作副本项目.在无限深度工作副本中运行svn update --set-depth empty将不会丢弃除最顶层目录之外的所有内容 - 它只会出错.
- http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html

这对SVN来说完全不可能吗?有没有人想出一个聪明的工作?

只需创建checkout目录(没有SVN),然后直接从存储库中检出单个子目录作为该目录的子目录将适用于目录:现在每个目录都是自己的结帐,可以更新,一旦不再需要,你可以删除它.但是,我如何获取文件(例如file1.txt)?SVN不允许签出单个文件,只能签出整个目录.

Mec*_*cki 58

Subversion 1.4或Subversion 1.5无法完成我想要做的事情.期.
没有解决方法存在,这就是它的方式.

不过,它可以用Subversion 1.6完成.

与SVN 1.5不同,SVN 1.6可以减少目录的深度

svn up --set-depth exclude dir2
Run Code Online (Sandbox Code Playgroud)

是解决方案.它将dir2的深度设置为零,并且它将立即从结帐中消失,并且没有更新会将其恢复,除非您再次明确地将此目录的深度设置为某个值(或者只是在没有深度选项的情况下对其进行更新,因为不给予任何深度总是意味着无穷大,除非你使用非递归,这​​意味着"文件").

提示:
实际上SVN 1.6无法真正减少深度,就像增加深度一样.您可以将它从任何级别增加到任何更高级别.您只能将其缩小为"排除"(所有的最低级别).如果要从"无限"(最高)减少到"文件"(中间的某个位置),必须首先将其缩小为"排除"(导致目录消失),然后再将其再次增加回"文件".这有点像黑客,但它的效果很好.

  • 通过给出空格分隔值可以排除+1多个目录.示例:svn up --set-depth exclude dir1 dir2 dir3 (2认同)
  • 我用rm删除目录后,这对我不起作用。我必须先还原它,然后再运行此命令,但此后它成功了。 (2认同)

Cod*_*ike 39

对于后来遇到这个并且使用TortoiseSVN的人来说,这里是如何做同样的事情......

  1. 右键单击不再需要签出的文件夹(这是您要排除的文件夹)
  2. 从上下文菜单中,选择"TortoiseSVN> Update to Revision ..."
  3. 在弹出的窗口中,将"更新深度"下拉框设置为"排除"
  4. 单击"确定".SVN将自动从您的驱动器中删除该目录.

(注意:这是使用TortoiseSVN 1.7.5完成的,并且可能因其他版本而异.)


leo*_*ger 11

更新:我正在运行SVN 1.6.11,并且我能够使用de-telescope svn up --set-depth empty dir而不是使用exclude目录.