工作副本是什么?在Tortoise SVN中,“切换”对我有什么作用?

63

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

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

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

这是什么意思?

目前,我已经:

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

全部签出。那么“切换”的意义是什么呢?目前,我只需进入我的/Trunk文件夹并进行我的工作。 当我进行标记和分支时,更新后在/Tags/和/Branches/文件夹中创建了文件夹。

如果我想要,为什么不直接转到/Branches/Experiemental-v3.0/并在那里进行工作呢?

有人能向我解释“工作副本”和“切换”的概念吗?我缺少了什么?人们通常没有检出整个存储库,就是这样吗?

5个回答

44

工作副本是您检出到工作区的副本。无论它是分支还是来自主干,这都不重要。这是您正在进行工作的副本。

您可以使用svn switch在同一父级的不同分支(或更准确地说是副本)之间切换。这基本上是说,当前工作副本与我要切换到的分支之间有什么不同。然后,它会对您当前的工作副本执行更新,以使其处于您要切换到的分支的版本。

所以,工作副本就是您检出的内容,无论是如何获得的。

切换只是更改您的工作副本提交的分支。将其视为更改指针,指向存储库中您的提交将进入的位置。并获取从分支到您的工作区的任何差异的帮助。


6
但这并没有回答问题,King想知道人们通常是否会将所有文件夹都签出?例如,如果我进入/Branches/Experimental-v3.0/文件夹并进行一些更改,那么提交时更改会不会被提交到该文件夹中?谁关心工作副本和“切换到”的目录。你所说的意思是用户一次只能签出一个副本。 - shabby
1
拥有所有文件夹的检出并不意味着您拥有svn仓库的副本。我可以有一个从分支检出的文件夹,但是在提交任何更改时,如果我进行了svn切换,我可以将提交提交到另一个分支。 - mtk
8
我建议不要害怕按照你现在的方式工作,并在本地机器上检出所有分支。这是我们使用了五年多的工作方式,使生活更简单。使用切换功能只检出一个分支确实有好处,但我想说,完全没有必要这样做,把所有分支都检出来也是可以的,对我们来说这种方法很有效。 - Action Dan

32

通常情况下,不需要完全检出整个代码库。在 Subversion 中,分支和标签是便宜的——也就是说,它们不会创建相同文件的副本,只是引用它们。

您可以检出所需的代码库的任意部分。例如,您可以有一个名为“trunk”的文件夹,它是仅包含主干的工作副本,另一个名为“version2”的文件夹,则是您的分支的工作副本。这样,创建的任何其他标签都不会被检出。

或者,您可以有一个名为“project”的唯一检出。如果它最初指向主干,那么您可以将其切换到其中一个分支或标签,这是重用原始检出的方法,使您不必再次获取所有内容。

这种方法非常实用,例如当您正在主干上工作,突然意识到需要将更改提交到某个分支时——可能是因为它们过于实验性。为此,请从您的工作副本分支,切换到新分支,然后提交,您的更改将进入分支而不是主干。


2
在我看来,这应该是被接受的答案。它比当前被接受的答案要好得多,因为它实际上回答了问题。 - Golo Roden

6

Working copy(工作副本)是你所检出的代码副本。通常情况下,你只需检出 /Project/trunk/,而不是整个仓库结构。切换操作是更改你的工作副本根目录的操作。使用 SVN 的方式并非最佳实践。


3
您的工作副本是您从subbversion检出项目所使用的硬盘上的任何文件夹。您可以“切换”到另一个项目以便该工作副本的版本内容类似于那个其他项目的内容。
这对于从主干切换到分支非常有用,而无需检出新副本。例如,它可以节省一些构建时间,因为未版本化的文件(已编译的对象、库、可执行文件)不会被删除或更改。
戴维

2
您已经检出了整个项目树 - 这可能不是您想要的。如果要在主干上工作,请检出以“trunk”为根的副本,而不是从项目根目录检出。同样,如果要进行分支工作,请仅检出您想要的分支。

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