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
解决这个问题。但是,我的经验是开发人员宁愿签入他们的东西,并从一个干净的结帐开始。