忽略SVN工作副本中的分支

4

最近,我们在项目的主干上创建了第一个分支。主干很大(几个GB),但对于服务器来说并不重要,因为分支是通过有效的链接进行的。然而,在客户端工作副本中,该项目现在确实需要两倍的空间(所有工作副本都来自存储库根目录)。

由于只有少数人真正需要这个分支,那么其他人如何使用TortoiseSVN忽略(即不下载)所有分支呢?

在此处建议用户仅检出主干并不是解决方案。我们的结构如下:

/
 projects
  project-x
   assets
    blabla.psd
   code
    trunk
    branches
     branch1
     branch2
  project-y
   ...

几个GB?你有把二进制文件加入忽略列表吗?如果没有,每次构建将向存储库添加一个完整的编译二进制文件集。 - tdammers
我们生成的二进制文件被忽略了,但是这个项目是一个游戏,所以它有很多艺术和音频资产需要在代码库中。 - Bart van Heukelom
5个回答

6

简短的解决方案-切换到/trunk。所有只需要trunk的人可以从/root/trunk而不是从/root检出。想要一个分支的人应该在另一个目录中检出该分支。

更详细的解决方案-仅检出所需内容但保持树形结构。如果您既想拥有所有自由,又想只使用您想要的内容,请按照以下步骤操作:

  1. 使用“仅立即子项”选项从根检出
  2. 使用“完全递归”选项从root/trunk检出

如果有人想要检出一些特殊分支,则在完成前两个步骤后:

  • 使用“仅立即子项”选项从root/branches检出
  • 使用“完全递归”选项从该特殊分支检出

您可以在SVN好书中找到更多关于主题的信息,章节为“稀疏目录”。

没有捷径可以挑选分支。除了批处理文件和TortoiseProc

编辑:如果您已经检出了整个存储库,并且现在想要排除某些内容以节省空间,请使用“更新项到版本”命令,在您要排除的文件夹上选择“排除”选项。根据手册,此选项仅在“更新到版本”对话框中可用。我想它是为了这个目的而设计的。

首先在临时工作副本上尝试此操作。我个人从未这样做过。

更新:从TortoiseSVN 1.7开始,Checkout对话框有一个“选择项目”按钮,使您可以选择只想要的文件夹并以单个步骤获取它们。在“更新项到版本”对话框中也有同样的按钮。


如果用户已经有一个工作副本,他如何更改目录的更新深度? - Bart van Heukelom
我不太明白。用户当前具有什么确切的结构,用户希望拥有什么确切的结构?而且,我所说的结构是指他的硬盘上的结构 :-) - Dialecticus

6
(从您的工作副本根目录开始)
find . -name branches -exec svn update --set-depth empty {} \;

这将从你的工作副本中移除所有分支,未来的更新将不会下载它们。 想要查看分支的开发人员可以随后执行以下操作:
svn update --set-depth infinity branches\my-feature-branch

1

右键单击您不想要的文件夹,然后转到“更新到修订版本...”。在弹出的对话框中,将更新深度设置为“排除”。 (请注意,这似乎仅适用于文件夹。)这将从您的工作副本中删除它,但不会影响存储库。 Tortoise 只是知道在更新期间不尝试更新它。

为了撤消它,您可以右键单击父文件夹(或其父文件夹等),然后选择“Repo Browser”。找到被排除的文件夹,右键单击并选择“将项目更新到修订版本”。您将获得相同的对话框;这次,只需确保它说“工作副本”

TortoiseSVN 中取消子文件夹的签出


1

我希望你有一个类似这样的结构:

repo root
  |
  +-- trunk
  |
  +-- branches
         |
         +-- branch1
         +-- branch2
         +-- ...

如果是这种情况,那么用户可以直接检出 http://server/repo/trunk 而不是 http://server/repo,当他们想要在分支上工作时,可以将其工作副本切换到 http://server/repo/branches/branch1

我们确实有默认的主干/分支结构,但是在这之间和根之间还有很多内容。我们的代码库中包含多个项目。每个项目中都有两个目录,“资产”和“代码”。“主干”和它的同级目录在“代码”目录中。 - Bart van Heukelom

0
如果人们必须与代码一起下载资源,那么按照项目X的级别进行分支更为自然。在这种情况下,您将不会遇到您所描述的问题。您是否有分支部分内容的任何理由?

我不明白你的意思。将整个项目分支会使它变得更大(除了没有意义,因为分支通常是主干的副本)。 - Bart van Heukelom
在当前的结构中,获取project-x项目的人将不得不下载所有分支。如果您在分支中包含资产,则他们将不会下载project-x,而只会下载project-x/some_branch。 - maxim1000
我明白,但那样行不通。我们的“源资产”(如PSD文件)不应该被放在主干/分支中,但是“编译资产”(如PNG文件),它们是“代码”的一部分,应该被放在主干/分支中。 - Bart van Heukelom
人们需要下载“资产”才能使用项目吗? - maxim1000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接