7

使用 Subversion,在我的工作副本中我做了一个小的修改(更新版本号)。然后我想标记我的工作副本。这个标签是否仍然是修改后的廉价副本,还是 SVN 会复制文件?我不想看到我的存储库的大小大幅增长,因为我正在尝试保存版本号更改。

我询问创建包含修改而不是提交然后标记的标签的原因涉及我的构建服务器。构建服务器创建一个 CCNetLabel,我用它来更新我的项目 (AssemblyInfo.cs) 的版本号。当构建成功时,它会创建一个标签。当我使用 ForceBuild 时,标签基于包含修改后的版本号的工作副本。我希望标签包含适当的版本号。

注意:如果我创建一个分支或一个标签,这是值得商榷的,但是 SVN 并没有区分这两者。

4

4 回答 4

5

这取决于。如果您的工作副本是最新的(所有节点具有相同的修订版),它与从存储库中标记一样便宜。

对于每个具有与其父版本不同的修订版的文件/目录(或实际上是子树),将添加附加数据。如果您有本地修改,则将添加更多数据。

但它仍然相当便宜:它不会复制存储库中已经存在的任何文件。

于 2010-03-07T12:12:47.213 回答
5

从颠覆描述

  • 分支和标记是廉价的(恒定时间)操作。这些操作没有理由变得昂贵,所以它们不是。分支和标签都是根据底层的“复制”操作来实现的。副本占用的空间很小且数量不变。任何副本都是标签;如果您开始提交副本,那么它也是一个分支。(这消除了 CVS 的“分支点标记”,首先消除了使分支点标记成为必要的区别。)

笔记!我刚刚注意到Subversion已移入 Apache 项目组织

于 2010-03-07T08:59:19.113 回答
2

相当过时的帖子,但值得一提的是,对于任何访问该答案的人来说,您只能“您只能标记已经提交到存储库中的数据......”提交的工作并不完全准确(至少现在不是)。

您可以标记工作副本,其中可能包含混合修订,甚至切换目录以及本地修改。

至于便宜,是的,它应该仍然便宜,因为 Subversion 会为你分支,然后将你的工作副本更改覆盖到 repo 中,尽可能节省空间

于 2011-08-17T18:37:38.247 回答
1

在 subversion 中创建标签或分支非常便宜。文件不会被复制。所发生的只是将创建一个新的修订版,其内容基本上只包含一个指向复制标签的位置的指针。对于具有一个小文件或具有一百万个大文件的项目标签,这将是相同的大小。

当您说“标记我的工作副本”时,您的意思是“标记我的工作分支”吗?您只能标记已提交到某个存储库中的数据,而不是本地未提交的更改。

于 2010-03-07T08:57:58.623 回答