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

SVN:您能否仅从本地签出(而不是从存储库)中删除目录?,svn,Svn,假设您有一个受subversion控制的目录,其中包含一些文件和大量子目录,如下所示: file1.txt file2.txt file3.txt dir1/ dir2/ dir3/ dir4/ : dirXX/ 现在你需要文件和一些目录,但不是全部。这可以通过SVN完成。只需将签出设置为非递归: svn checkout -N <URL> 如果将来运行一个通用的“svn up”,它将只更新文件和这两个目录,而不会添加任何其他目录 现在的问题是:如果我以后决定不再需要dir2怎么

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

file1.txt
file2.txt
file3.txt
dir1/
dir2/
dir3/
dir4/
:
dirXX/
现在你需要文件和一些目录,但不是全部。这可以通过SVN完成。只需将签出设置为非递归:

svn checkout -N <URL>
如果将来运行一个通用的“
svn up
”,它将只更新文件和这两个目录,而不会添加任何其他目录

现在的问题是:如果我以后决定不再需要dir2怎么办?我怎样才能摆脱它?除了删除整个结帐并从头开始之外,似乎没有其他方法可以做到这一点

当您刚刚删除dir2时,下一个“
svn up
”将把它带回来,因为“
svn status
”当然会显示它现在已丢失(“!”在其名称前面)。运行“
svn remove
”当然会将其删除,但在下一次提交时,它也会将其从存储库中删除,这是绝对不能发生的

甚至SVN 1.5的新稀疏目录(“浅签出”)功能在这里也没有用处:

Subversion 1.5的实现 浅结账是好的,但不是 支持一些有趣的 行为。首先,你不能 对工作副本项进行反汇编。 正在运行svn更新--将深度设置为空 在无限深的工作副本将 没有丢弃的效果 除了最上面的 它只会出错。
-

这在SVN中是完全不可能的吗?有没有人想出过一个聪明的办法

只需创建签出目录(不带SVN),然后直接从存储库中将各个子目录作为子目录签出到此目录即可:现在每个目录都是自己的签出,可以更新,一旦不再需要,您可以将其删除。但是,如何获取文件(例如file1.txt)?SVN不允许签出单个文件,您只能签出整个目录。

您可以尝试使用本地存储库和SVN:外部声明

不过,我自己还没有尝试过。

我试图做的事情不能用Subversion 1.4或Subversion 1.5来完成;期间。
不存在变通办法,就是这样

但是,它可以通过Subversion 1.6完成。

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

svn up --set-depth exclude dir2
这就是解决办法。它将dir2的深度设置为零,并且它将立即从签出中消失,并且没有更新将使其返回,除非您再次显式地将此目录的深度设置为一个值(或者只是在没有深度选项的情况下对其进行更新,因为不提供任何深度总是意味着无穷大,除非您使用非递归,这意味着“文件”)

提示:

实际上,SVN1.6不能像增加深度那样减少深度。您可以将其从任何级别增加到任何更高级别。您只能将其减少为“排除”(所有级别中的最低级别)。如果要从“无限”(最高)减少到“文件”(中间的某个位置),必须首先将其减少到“排除”(导致目录消失),然后再次将其增加到“文件”。这是一个小技巧,但效果很好。

更新:我正在运行SVN 1.6.11,我能够使用
SVN-up--set depth empty dir
取消望远镜,而不是必须
排除目录。

使用SVN 1.6,
--set depth
就是答案


使用svn<1.6,您可以通过滥用
svn开关
获得稀疏签出:在存储库中的某个位置创建一个空目录,然后
开关
您现在不需要指向该目录的子目录,而不是它们的“真实”URL。

对于以后遇到此问题并使用TortoiseSVN的任何人,下面是如何做同样的事情

  • 右键单击不再要签出的文件夹(这是要排除的文件夹)
  • 从关联菜单中,选择“TortoiseSVN>更新到修订…”
  • 在弹出的窗口中,将“更新深度”下拉框设置为“排除”
  • 单击“确定”。SVN现在将自动从驱动器中删除该目录

  • (注意:这是用OrtoiseSVN 1.7.5完成的,其他版本可能会有所不同。)

    我认为这和这两个问题是一样的:,@ire_和_curses:首先,为什么不写下这篇文章作为答案?第二:这两个问题是关于防止某些事情发生的。这与我的问题毫无关系。即使我在目录上执行svn delete并阻止提交,目录也不会消失。你读过我的问题或只是标题吗?@Mecki:我读过你的问题,尽管我承认我很匆忙。我以为您在问如何在不影响存储库版本的情况下删除本地副本中受版本控制的目录,并且在下一次更新中不重新获取目录。虽然我还没有尝试过,但似乎将所有其他内容都作为变更列表的成员就可以做到这一点。我写这篇文章并不是为了回答,因为它已经存在于其他两个问题中(我认为是一样的)——如果我是对的,我只会得到别人工作的代表。如果这对你没有用,我很抱歉。@ire_和_诅咒:如果你没有写一个真正的答案,你就不能得到投票,我也不能直接评论你写的东西。即使问题已经在别处得到了回答,也要写一个真实的答案。如果我的问题没有及时结束,我可以接受你的回答为“答案”,即使它只是把我带到其他地方。不公平?我想是的。毕竟,仅仅通过提供一个链接来回答问题,也会给你提供其他人工作的代表。这听起来很有趣!第一个答案,而且已经是一个非常好的答案(向上投票)。不确定这是否是最好的解决方案
    svn up --set-depth exclude dir2