【问题标题】:SVN - When you tag a working copy is it still a cheap copy?SVN - 当您标记工作副本时,它仍然是廉价副本吗?
【发布时间】:2011-01-24 15:20:22
【问题描述】:

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

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

注意:我是创建一个分支还是一个标签是有争议的,但是 SVN 并没有区分这两者。

【问题讨论】:

    标签: svn tags branch working-copy


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 太好了,我担心它可能会复制所有文件。听起来标记工作副本几乎不会比标记服务器上的分支大。现在,如果我可以告诉 Cruise Control .net 始终标记我的工作副本......groups.google.com/group/ccnet-devel/browse_thread/thread/…
      • 如果我的工作副本中有一个目录“A”并且我标记了它。我知道这将是存储库中的廉价副本。但是,后来我从我的工作目录中删除了“A”。廉价副本会发生什么?它还会有“A”吗?
      【解决方案3】:

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

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

      【讨论】:

      • 我的意思是标记我的工作副本。该过程将是:svn update,更新工作副本中的版本号,从工作副本生成标签。目标是在标签中保存更新的版本信息(分支加上版本号的修改)。
      【解决方案4】:

      来自颠覆描述

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-04
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 2011-08-17
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多