SVN:您可以仅从本地 checkout (而不是从存储库)中删除目录吗?

标签 svn

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

file1.txt
file2.txt
file3.txt
dir1/
dir2/
dir3/
dir4/
:
dirXX/

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

svn checkout -N <URL>

这仅检查第一个目录和其中的文件。不包含子目录。即使您进入 checkout 目录并运行“svn up”,它也只会更新之前 checkout 的文件,而不会添加目录。您现在可以通过显式更新来选择性地添加所需的目录。例如。如果你只需要dir2和dir4,你可以进入checkout目录并执行

svn up dir2
svn up dir4

如果您将来运行通用的“svn up”,它只会更新文件和这两个目录,不会添加任何其他目录。

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

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

即使是 SVN 1.5 的新稀疏目录(“浅 checkout ”)功能在这里也没用:

Subversion 1.5's implementation of shallow checkouts is good but does not support a couple of interesting behaviors. First, you cannot de-telescope a working copy item. Running svn update --set-depth empty in an infinite-depth working copy will not have the effect of discarding everything but the topmost directory—it will simply error out.
- http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html

这对于 SVN 来说是完全不可能的吗?有人想出了一个巧妙的解决办法吗?

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

最佳答案

我想要做的事情无法用 Subversion 1.4 或 Subversion 1.5 完成;就这样。
不存在解决办法,事情就是这样。

不过,可以使用 Subversion 1.6 来完成。

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

svn up --set-depth exclude dir2

就是解决方案。它将 dir2 的深度设置为零,并且它将立即从 checkout 中消失,并且任何更新都不会将其恢复,除非您再次显式将此目录的深度设置为一个值(或者只是在没有深度选项的情况下对其进行更新,因为不给出任何深度总是意味着无穷大,除非您使用非递归,这​​意味着"file")。

提示:
实际上,SVN 1.6 并不能像增加深度一样真正减少深度。您可以将其从任何级别增加到任何更高级别。您只能将其降低为“排除”(所有级别中的最低级别)。如果您想从“无穷大”(最高)减少到"file"(中间的某个位置),则必须首先将其减少到“排除”(导致目录消失),然后再次将其增加回"file"。这有点像黑客,但效果很好。

关于SVN:您可以仅从本地 checkout (而不是从存储库)中删除目录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1439176/

相关文章:

svn - hgsubversion 找不到存储库

svn - 颠覆 - 创建新存储库时出现问题

c++ - 如何获得基于 c 函数的差异?

本地删除文件后SVN提交错误

svn - 使用 Tortoise SVN 进行单用户版本控制

svn - 颠覆 : svn protocol with HTTP/HTTPS proxy

android - 将 Android Studio 与 SVN 连接

c - 如果启用了某个#define,如何防止SVN允许提交?

svn - 如何从 SVN 获取 HEAD 之前的上一个版本?

windows - 如何调整 SVN 设置以在 Windows 上转换行尾?