我们可以使用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.