svn - 颠覆结帐: is there a way to skip a subtree?

标签 svn svn-checkout

我有一个包含大量目录和文件的存储库。对于临时构建,我只需要从根开始的树的子集。一些不需要的子树深处包含了临时构建不需要的巨大文件。我尝试过使用 --深度空 选项来仅 checkout 稀疏树,但这很麻烦而且倒退,因为我最终得到了一个大的我想要的目录白名单,而不是一个很小的黑名单我不想要的目录。由于需要监视我可能需要进行临时构建的新目录,白名单方法变得更加复杂。

有没有办法以递归方式表达 checkout dir但跳过dir/foo/bar/bazdir/frob/tweak 不跳圈?类似于 find(1)-prune 谓词?

最佳答案

Subversion 假定您需要整个目录树。有一种方法可以进行稀疏结帐,但它有点像跳圈机制:

首先,进行检查并将 --深度 设置为立即数:

 $ svn co --depth=immediates svn://localhost/myproject/trunk myproject-trunk

这将 check out 根目录下的所有文件和目录。

接下来,您可以使用各种 shell 脚本魔法,通过 --set-depth 标志仅更新您想要的目录:

$ shopt -s extglob   #Needed on BASH, but not Kornshell
$ svn co --depth=immediates $REPO_URL
$ svn up --set-depth=infinity !(foo|frob)

上面将检查除 foofrob 之外的所有目录树。

您也可以使用 find 执行类似的操作。

问题是 Subversion 非常简单,而且就是这么设计的。在 Perforce 和 ClearCase 等其他版本控制系统中,您可以指定要 checkout 的内容,而在 Perforce 中,则可以指定 checkout 的方式。

但是,这需要您设置一个 View ,这使得使用这些版本控制系统变得非常非常复杂。我喜欢佩福斯。它快速而强大,但开发人员讨厌它,因为需要 View 。对他们来说,它增加了一定程度的复杂性,但实际上并没有给他们带来太多好处。他们很少需要进行稀疏结账。

如果这是您的 Subversion 存储库的常见问题,您可能需要重新考虑您的布局以使其更加方便。这在 Subversion 中并不太困难,因为整个存储库只是一个包含分支和标签的文件树。很多时候,我们决定放弃主干并将其替换为特定分支,或者重命名和重组我们的存储库以使其更易于使用。

请务必与您的开发人员协调任何大规模重组。如果您移动他们正在处理的目录树,他们会突然发现他们无法提交更改(大多数时候,他们可以执行 svn switch --relocate 来解决此问题.然而,我的经验是,开发人员宁愿检查他们的东西并从干净的结账开始。

关于svn - 颠覆结帐: is there a way to skip a subtree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212375/

相关文章:

使用 SVN 协议(protocol)的 SVN 结帐

SVN + Veracrypt + Dropbox?

svn - 在 Jenkins svn 结帐策略中,是否可以每天更新并在周末模拟干净的结帐?

authentication - 由于登录失败,SVN checkout 失败

eclipse - 使用 Eclipse 从 SVN 结帐到远程位置

svn - 使用TortoiseSVN按用户查找所有 checkin 的列表

svn - 如何获取 SVN 存储库的本地副本?

svn - 在 SVN 中导出已删除的文件

SVN X 仍然处于树冲突中

batch-file - SVN check out bat文件错误