我开发了一种手册网站模板,我的大部分客户网站都是基于该模板的。模板和派生站点一起存储在Subversion存储库中。出血边缘(但稳定)代码存在于/trunk
;并且每个网站都有自己的分支,以便于定制。现在我正在接近2.0版本,我觉得我需要与标签达成协议。
据我了解,应标记重要版本。标签只是指向特定修订版的指针,绝不应该修改永远。因此,假设我的模板版本为2.0,并且已经在主干中有新代码。如果我想基于2.0代码创建一个新分支,我该怎么做呢?
我是否会分支/tags/2.0
?这不可能是正确的。我会在哪里进行更改?我不得不故意绕开我的分支的祖先。我是否必须手动查找/tags/2.0
对应的主干版本,然后在主干中分支该版本?这似乎......很麻烦。我相信直到最近Subversion甚至没有存储这些信息!
编辑:在我说“分支/tags/2.0
”的地方,我想说,“看看/tags/2.0
”。但那个错误也是我问题的答案。出于某种原因,我从未想过复制标签。傻,对吗?但在我看来,标签是“最终的”。
顺便说一下,我完全认为标签只是一种惯例。我很困惑的是公约本身,而不是它的底层实现。
答案 0 :(得分:2)
始终从主干创建分支,除非您想从过去的某个分支(过去的标记,分支或旧的主干版本)进行分支。
此外,您不能轻易地将任何内容提交到标记;至少TortoiseSVN客户端会通过消息保护您。
答案 1 :(得分:2)
我把出血边(但稳定)放入/ trunk。当发布的功能完成后,我将/ trunk复制到/branches/Foobar-1.2.3.X。我立即将/branches/Foobar-1.2.3.X复制到/tags/Foobar-1.2.3.0(这使得差异更容易以后,我可以将/bobches-1Foobar-1.2.3.X扩展到/tags/Foobar-1.2。 3.0,看看我的分支中发生了什么变化,因为那个时间/主干可能会有所不同)。最后的开发将继续进行/branches/Foobar-1.2.3.X中的功能,并且当我发布版本时,我将其复制到/tags/Foobar-1.2.3.1,/tags/Foobar-1.2.3.2等。我的构建系统是旨在仅从/ tags / Foobar中提取代码 - ????。
这也适用于“特殊”分支:/branches/Foobar-WhizzBangFeature-1.2.X
答案 2 :(得分:1)
是的,在您要分支的版本的存储库的/branch
文件夹中创建一个svn copy
分支。
例如:
/branch
/tags
/1.0
/2.0
/trunk
然后是2.0的分支:
/branch
/something2.0
/tags
/1.0
/2.0
/trunk
答案 3 :(得分:0)
您在/ branches(或存储分支的任何位置)下制作标记目录的副本(使用'svn copy'),可能使用2.0-hotfix或类似分支名称(与标记名称不同)。
它很简单。 SVN实际上没有标签和分支,只有目录和文件。这完全取决于你的政策。
可能更自然的方式是首先创建2.0分支,稳定分支中的代码,然后从分支创建标记。
答案 4 :(得分:0)
我假设你正在使用Tortoise SVN。假设您有以下情况:
/trunk
/braches
/branch1
/branch2
/tags
/1.0
/2.0
然后您需要做的就是:
就是这样。然后,您需要查看/branches/tag/2.0(或其他任何名称)来处理它。
您需要做的就是将SVN简单地视为文件系统。您在该文件系统中提供的名称和含义由您决定。事实上,您无法编辑“标签”,例如,只是一种惯例 - 底层文件系统并不关心您是否编辑它们。