我们可以使用Subversion进行部分结帐吗?
时间:2020-03-05 18:49:43 来源:igfitidea点击:
如果我在trunk /下有20个目录,每个目录中都有很多文件,并且只需要其中3个目录,那么是否有可能仅对这3个目录进行一次Subversion检出?
解决方案
回答
或者对/ trunk进行非递归检出,然后仅对所需的3个目录进行手动更新。
回答
并非以任何特别有用的方式,不是。我们可以检出子树(如Bobby Hyman的建议),但是我们将失去自动更新/提交子树的能力。为此,需要将它们放置在其公共父目录下,一旦我们签出了公共父目录,便会下载该父目录下的所有内容。非递归不是一个好的选择,因为我们希望更新和提交是递归的。
回答
有点。正如鲍比所说:
svn co file:///.../trunk/foo file:///.../trunk/bar file:///.../trunk/hum
将获得文件夹,但从Subversion角度来看,我们将获得单独的文件夹。我们将必须在每个子文件夹上进行单独的提交和更新。
我不相信我们可以签出局部树,然后将局部树作为单个实体使用。
回答
确实,由于我在这里的帖子的评论,看起来稀疏目录似乎是必经之路。我相信以下应该这样做:
svn checkout --depth empty http://svnserver/trunk/proj svn update --set-depth infinity proj/foo svn update --set-depth infinity proj/bar svn update --set-depth infinity proj/baz
另外,--depth立即数而不是空会检出trunk / proj中的文件和目录,而不包含其内容。这样,我们可以查看存储库中存在哪些目录。
如@zigdon的答案中所述,我们还可以执行非递归检出。这是实现类似效果的一种较旧且较不灵活的方法:
svn checkout --non-recursive http://svnserver/trunk/proj svn update trunk/foo svn update trunk/bar svn update trunk/baz
回答
Subversion 1.5引入了稀疏签出,这可能对我们有用。从文档中:
... sparse directories (or shallow checkouts) ... allows you to easily check out a working copy—or a portion of a working copy—more shallowly than full recursion, with the freedom to bring in previously ignored files and subdirectories at a later time.