2

我了解分支和合并的基本概念。我发现的所有解释都是关于分支你的整个主干以创建一个分支项目并对其进行处理,然后将其合并回来。是否可以分支项目的子集?

我认为一个例子将帮助我最好地解释我想要做什么。假设我有一个包含十个文件 file0 到 file10 的应用程序。所有文件都是相互依赖的,并且能够测试任何一个文件,所有其他文件都需要包含在构建中。我想处理file0,但不需要对file1 到file10 进行更改。我可以对 file0 进行分支,以便对 file0 所做的更改将更新 myrepos/branches/a-branch/file0 之类的内容,但我的工作副本中的所有其他文件都只是来自主干吗?

我想这样做的原因是我正在开发一个包含数万个文件的大型 j2ee 应用程序,而且似乎分支整个事情需要很长时间。此外,我正在使用带有 subclipse 的 eclipse(我可能对此错了),但似乎如果我在 eclipse 中分支一个项目,那么我将不得不设置一个新的 eclipse 项目以指向该分支。不幸的是,由于应用程序的大小,将这个特定项目从 SVN 导入到 eclipse 需要几个小时。花这么多时间对我来说是不现实的。

我想我可能有错误的概念。也许分支整个项目根本不需要新的工作副本?

感谢您对这个问题的任何启示。

4

4 回答 4

2

在 Subversion 中,创建分支只是创建目录层次结构的副本。因此,您可以分支一个子集,但前提是该子集可以由目录层次结构定义。

我可以对 file0 进行分支,以便对 file0 所做的更改将更新 myrepos/branches/a-branch/file0 之类的内容,但我的工作副本中的所有其他文件都只是来自主干吗?

要回答这个问题:不,您不能分支单个文件。但是,我认为您想要做的是创建一个分支并在file0那里工作。当您对文件进行更改时trunk,您只需将它们合并到您正在处理的分支file0中。

这样,您将始终获得来自 的最新信息trunk这将使您能够file0独立于主干测试更改。然后,您可以使用svn switch在主干和分支之间移动“文件镜头”(但请注意,Eclipse 可能会抱怨这种恶作剧)。

于 2009-07-22T15:53:20.370 回答
2

在 Subversion 中对整个(甚至)非常大的树进行分支是一个非常便宜的操作,它会进行惰性(O(1) 时间)文件复制。

您不必更改整个工作副本以仅处理一个已更改的文件。您可以使用svn switch将工作副本中的一个文件或一个目录切换为分支上文件的签出版本。

于 2009-07-22T15:58:19.113 回答
1

svn 分支基于惰性复制机制,因此您可以安全地分支您的所有项目:这不会花费很长时间。

正如问题“我如何在 SVN 中分支单个文件? ”中所述,您可以分支一个子集,但我相信这对于svn:merginfo 属性机制会很危险:如果从项目的根。

于 2009-07-22T15:52:19.373 回答
1

SVN 中的分支是 O(1) 操作。此外,由于 SVN 内部采用了惰性复制,因此您只需为更改的内容支付空间损失。

所以如果你不确定,为什么不继续分支整个项目呢?

(正如夸克所提到的,分支大型项目的一个问题是,如果您并行检出多个分支/主干,这可能会占用大量本地磁盘空间。)

于 2009-07-22T15:53:41.773 回答