代码之家  ›  专栏  ›  技术社区  ›  mcdon

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

  •  6
  • mcdon  · 技术社区  · 16 年前

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

    我之所以要创建包含修改而不是提交然后标记的标记,是因为我的构建服务器。生成服务器创建一个ccnetlabel,用于更新项目的版本号(assemblyinfo.cs)。当构建成功时,它会创建一个标记。当我使用forcebuild时,标记基于工作副本,其中包含修改后的版本号。我希望标记包含适当的版本号。

    注意:如果我要创建一个分支或标记,这是有争议的,但是SVN并没有区分这两者。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Bert Huijben    16 年前

    视情况而定。如果您的工作副本是最新的(所有节点都有相同的修订版),那么它和从存储库中标记一样便宜。

    对于每个文件/目录(或实际子树),将添加与其父目录修订版不同的附加数据。如果您进行了局部修改,那么将添加更多的数据。

    但它还是相当便宜:它不会复制存储库中已有的任何文件。

        2
  •  5
  •   epatel    16 年前

    从颠覆性描述

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

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

        3
  •  1
  •   Thilo    16 年前

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

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

        4
  •  1
  •   Rob    15 年前

    这是一篇过时的文章,但值得一提的是,对于任何访问过的人来说,声明您只能“标记已提交到存储库中的数据…”的回答是“提交的工作不完全准确(至少现在不准确)。

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

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