61

我有一个软件应用程序,我已经达到了一个重要的里程碑,2.0 版。

我决定将此版本标记为“2.0 版”,因此我命名了此快照。我还创建了一个“2.0 版”分支,以防我需要修复任何东西并将其合并回我的主干。

阅读 Tortoise SVN 帮助文件后,它通知我可以将“工作副本”切换到新创建的分支。

这是什么意思?

目前,我有:

/Project/Trunk/
/Project/Tags/
/Project/Branches/

都签了。那么“切换”的意义何在?目前,我只是去我的 /trunk 文件夹做我的工作。当我创建标签和分支时,它会在我更新后在我的 /Tags/ 和 /Branches/ 文件夹中创建文件夹。

如果我愿意,我为什么不直接去 /Branches/Experimental-v3.0/ 并在那里做我的工作?

有人可以向我解释“工作副本”和“切换”的概念吗?我错过了什么?人们通常不会检查整个存储库,是这样吗?

4

5 回答 5

45

工作副本是您已签出到工作区的副本。不管是树枝还是树干。这就是你正在做的事情。

您可以使用 svn switch 在同一父级的分支(或更正确的副本)之间切换。这基本上会说,当前工作副本和我切换到的分支之间有什么不同。然后它会在您当前的工作副本上执行更新到您切换到的分支的修订版。

因此,工作副本是您的结帐,无论它是如何获得的。

切换只是更改您的工作副本提交的分支。可以将其想象为更改提交所在的存储库中的指针。借助获取从分支机构到您的工作区域的任何差异。

于 2009-02-24T10:30:23.817 回答
31

通常不需要检查整个存储库。subversion 中的分支和标签旨在廉价——即,它们不会创建相同文件的副本,只是引用它们。当您检查了整个存储库时,当任何人出于任何原因进行分支或标记时,它会突然增加本地硬盘驱动器上使用的空间。

您可以根据需要签出存储库的任意多个部分。因此,您可以有一个名为“trunk”的文件夹,它只是主干的工作副本,另一个“version2”将是您的分支的工作副本。这样,创建的任何附加标签都不会被检出。

或者你可以有一个名为“项目”的结帐,如果它最初指向主干,你可以将它切换到一个分支或标签——这是一种重新使用原始结帐的方式,这样你就不必得到一切从头再来。

当你在主干上工作并突然意识到你需要将你的更改提交到一个分支时,这样做是非常有用的——也许是因为它们太实验性了。为此,从您的工作副本分支,切换到新分支然后提交,您的更改将转到分支而不是主干。

于 2009-02-24T10:35:46.610 回答
5

工作副本是您已签出的代码副本。通常,您只检查 /Project/trunk/,而不是存储库的整个结构。切换正在更改您的工作副本的根。您使用 SVN 的方式不是应该如何完成的。

于 2009-02-24T10:28:04.710 回答
3

您的工作副本是硬盘驱动器上用于从 subbversion 签出项目的任何文件夹。您可以为该工作副本“切换”到不同的项目,以便版本控制的内容类似于该其他项目的内容。

这对于从主干切换到分支很有用,而无需签出新副本。例如,它可以为您节省一些构建时间,因为未删除或更改未版本化的文件(您的编译对象、库、可执行文件)。

戴夫

于 2009-02-24T10:26:23.340 回答
2

您已经检查了整个项目树 - 这可能不是您想要的。对于主干工作,请查看以“主干”为根的副本,而不是从项目根目录。同样,对于分支工作,只签出您想要的分支。

于 2009-02-24T10:32:26.463 回答