当我从现有存储库签出项目时,创建了三个文件夹:branches
,tags
和trunk
。
我将源代码放在trunk
目录中:
trunk
|--include
|--src
|--lib
|--bin
|--build
|--doc
但是当我完成项目的一个版本时,我似乎应该将它的副本放在tags
目录中(例如标签> my_project-1.0.0)。
标签目录是否与SVN中的源代码重复?或者我做错了什么?
我的意思是我应该在tag
目录中保存所有以前的源代码,或者我应该在trunk
目录中保存最新版本而不在其他文件夹中重复?
答案 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
但这只会占用磁盘空间一次(在服务器上),和两次 - 在本地磁盘上。