SVN - 当你标记工作副本时,它仍然是一个廉价的副本?

时间:2010-03-07 08:54:34

标签: svn tags branch working-copy

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

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

注意:如果我正在创建分支或标记,那么这是有争议的,但是SVN并没有对这两者进行区分。

4 个答案:

答案 0 :(得分:5)

来自颠覆说明

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

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

答案 1 :(得分:5)

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

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

但它仍然合理便宜:它不会复制存储库中已有的任何文件。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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