我如何使用版本控制标签?

时间:2009-03-10 21:12:32

标签: svn version-control tags

我开发了一种手册网站模板,我的大部分客户网站都是基于该模板的。模板和派生站点一起存储在Subversion存储库中。出血边缘(但稳定)代码存在于/trunk;并且每个网站都有自己的分支,以便于定制。现在我正在接近2.0版本,我觉得我需要与标签达成协议。

据我了解,应标记重要版本。标签只是指向特定修订版的指针,绝不应该修改永远。因此,假设我的模板版本为2.0,并且已经在主干中有新代码。如果我想基于2.0代码创建一个新分支,我该怎么做呢?

我是否会分支/tags/2.0?这不可能是正确的。我会在哪里进行更改?我不得不故意绕开我的分支的祖先。我是否必须手动查找/tags/2.0对应的主干版本,然后在主干中分支该版本?这似乎......很麻烦。我相信直到最近Subversion甚至没有存储这些信息!

显然,我缺少一些基本的东西。快速了解标签实际 使用的方式(而不是 >)会有所帮助。感谢。

编辑:在我说“分支/tags/2.0”的地方,我想说,“看看/tags/2.0”。但那个错误也是我问题的答案。出于某种原因,我从未想过复制标签。傻,对吗?但在我看来,标签是“最终的”。

顺便说一下,我完全认为标签只是一种惯例。我很困惑的是公约本身,而不是它的底层实现。

5 个答案:

答案 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

然后您需要做的就是:

  • 打开togoise repo-browser
  • 转到根目录并展开,以便您可以看到自己在做什么
  • 选择/tag/2.0文件夹
  • 按住Ctrl键并拖动将其复制到/ branches folde
  • 重命名新文件夹(或不重命名)

就是这样。然后,您需要查看/branches/tag/2.0(或其他任何名称)来处理它。

您需要做的就是将SVN简单地视为文件系统。您在该文件系统中提供的名称和含义由您决定。事实上,您无法编辑“标签”,例如,只是一种惯例 - 底层文件系统并不关心您是否编辑它们。