标签目录是否与SVN中的源代码重复?

时间:2011-11-21 11:51:39

标签: svn version-control

当我从现有存储库签出项目时,创建了三个文件夹:branchestagstrunk

我将源代码放在trunk目录中:

trunk
  |--include
  |--src
  |--lib
  |--bin
  |--build
  |--doc

但是当我完成项目的一个版本时,我似乎应该将它的副本放在tags目录中(例如标签> my_project-1.0.0)。

标签目录是否与SVN中的源代码重复?或者我做错了什么?

我的意思是我应该在tag目录中保存所有以前的源代码,或者我应该在trunk目录中保存最新版本而不在其他文件夹中重复?

2 个答案:

答案 0 :(得分:3)

它不会复制存储,没有。 SVN有效地将其数据存储为版本化文件系统树加上一桶文件数据,而trunk / include / abc.h将指向与tags / myTag / include / abc.h相同的文件数据。

现在有两个路径可以访问相同的代码副本,是的,但是标签版本将修复到您复制的版本。当你继续提交trunk / include / abc.h时,tags / myTag / include / abc.h将保持不变。

也就是说,你总是可以通过重新编写版本号来引用trunk上的代码版本:你可以写下某个版本 - release 1.0.0 = trunk @ 12345。也就是说,标签是一种更容易记住这一点的方法,它将包含将元数据链接回您复制它们的特定主干版本的元数据。

您的最新编辑:我不是100%确定“以前或最新”的含义,但您应该保存实际发布的版本。您可能还希望从发布中创建一个稳定的分支,以便您可以从相同版本的代码而不是中继创建修订版本。没有(或很少)存储开销用于标记主干上的所有内容。如果你的意思是你可以访问从标签开始的文件的提交日志然后是,你可以 - 标签有效地包含到那一点的所有历史。


对不起,只是发现了这个:

  

当我从现有存储库签出项目时,创建了三个文件夹:分支,标签和主干。

不 - 您只需要检查主干或您正在处理的分支机构。你不应该检查整个事情,不,或者你会在磁盘上复制一切。检查存储库的根目录是一个坏主意,在subversion发行版中甚至还有一个apache插件,您可以安装它以明确禁止它。

答案 1 :(得分:1)

SVN中的标签只是一个命名版本,即r1000内部命名为' 1.0.0'。

因此,如果您要在本地结帐标签,将获得以下内容:

branches
tags
  |--1.0.0
    |--include
    |--src
    |--lib
    |--bin
    |--build
    |--doc
trunk
  |--include
  |--src
  |--lib
  |--bin
  |--build
  |--doc

但这只会占用磁盘空间一次(在服务器上),和两次 - 在本地磁盘上