Subversion假定你想要整个目录树。有一种方法做稀疏检出,但它是排序的箍通过机制跳跃:
首先,检出的操作和设置--depth
来立即数:
$ svn co --depth=immediates svn://localhost/myproject/trunk myproject-trunk
这将签出的所有文件和立即在根目录下的目录。
接下来,你可以使用所有种类的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)
上面会做所有的目录树的结账除了foo
和frob
。
你也可以用find
做类似的事情。
问题是Subversion非常简单,并且被设计成这样。在其他版本控制系统(如Perforce和ClearCase)中,您可以指定要检出的内容,并在Perforce中指定要如何检出。
但是,这要求您设置一个视图这使得使用这些版本控制系统变得非常复杂得多。我喜欢Perforce。它快速且功能强大,但开发者因为需要意见而讨厌它。对他们来说,它增加了一些复杂性,但并没有给他们带来太多的好处。他们很少需要做稀疏结账。
如果这是您的Subversion存储库的常见问题,您可能需要重新考虑您的布局以使其更便利。这在Subversion中并不难,因为整个存储库只是一个包含分支和标签的文件树。我们曾多次决定放弃中继并将其替换为特定的分支,或者重新命名和重构我们的存储库以使其更易于使用。
只要确保与开发人员协调任何大规模重组。如果你移动他们正在处理的目录树,他们会突然发现他们不能提交他们的改变(大多数情况下,他们可以做一个svn switch --relocate
来解决这个问题。但是,我的经验是,开发者宁愿检查在他们的东西,并开始一个干净的结帐。
如果我正确理解你,这可以归结为从短黑名单(使用Unix工具箱)创建长白名单,然后让svn工作在白名单,对吗? – Jens
@Jens这几乎是它。我想可能[changelists](http://svnbook.red-bean.com/en/1.7/svn.advanced.changelists.html)可能会有帮助,但它们只适用于文件而不适用于目录。 –
我相信第二个svn命令应该是更新,而不是结帐。正确?这是现在的一个旧的答案,所以也许有些改变。 – Pianosaurus