Svn 在subversion中标记存储库的一部分

Svn 在subversion中标记存储库的一部分,svn,cvs,Svn,Cvs,我有CVS背景。我目前正在调查在一个项目中使用SVN。我处理的代码通常位于以下目录结构中 项目\libs\lib1 项目\libs\lib1\test 项目\libs\lib1\mock 项目\libs\lib2 等等 当我在CVS中标记一个发布时,我倾向于创建两个标记,一个是“project-release-1”,另一个是“project-release-1-with-tests”。“project-release-1”标记不包括测试目录和模拟目录,可能还包括一些其他文件。我们的想法是,我们通

我有CVS背景。我目前正在调查在一个项目中使用SVN。我处理的代码通常位于以下目录结构中

项目\libs\lib1

项目\libs\lib1\test

项目\libs\lib1\mock

项目\libs\lib2

等等

当我在CVS中标记一个发布时,我倾向于创建两个标记,一个是“project-release-1”,另一个是“project-release-1-with-tests”。“project-release-1”标记不包括测试目录和模拟目录,可能还包括一些其他文件。我们的想法是,我们通常不向客户发送测试源代码,通过导出“project-release-1”标记,我们可以得到客户的源代码集,我们可以将其发送给客户,通过对“project-release-1-with-tests”标记进行签出,我们可以得到所有的代码,如果需要进行开发,我们可以将其用于分支

如何使用SVN执行类似操作?理想情况下,采用可编写脚本的形式;有了SVN,我们每个项目都有一个脚本,它将应用这两个标记,并通过简单地从测试和模拟目录中删除标记来创建客户机标记,等等

我猜在SVN中我会创建“with tests”标记,然后(不知何故)检查它,删除测试和模拟目录并创建客户端发布标记

更新


我决定改变我做事的方式。。。我现在没有为每个项目设置一个脚本来设置我的老式twin标记,而是为每个项目创建一个脚本,它接受标记的版本(包括我没有发送给客户的内容),并删除我没有发送给客户的内容。工作完成了,只需要一个标签。

我不知道这是否是“正确”的答案,但我可以想出两个选择

A.标记并删除:

  • 将/project/libs目录标记为project-release-1
  • 从project-release-1中删除“测试”和“模拟”目录。 或者,首先创建一个包含所有内容的project-release-1-with-tests标记,然后将该目录标记为project-release-1(复制),并重复上面的第2步
  • B.使用“外部”:

  • 在标记下创建一个空的project-release-1目录。不要真正标记,只需创建目录
  • 编辑该目录的属性,添加名为“svn:externals”的属性。在该属性的值中输入: lib1-r$revURL:to/project/libs/lib1 lib2-r$revURL:to/project/libs/lib2
  • 其中$REV是标记源代码的修订号。 稍后,当您签出“without tests”目录时,您将得到两个“taged”目录

    我认为第一种选择更好,因为分析分支和标记的工具将更好地理解您所做的事情

    另一方面,我想知道你为什么想要无测试标签;为什么在标签中包含测试会让您感到烦恼

    • 诺姆
    标签与任何其他副本一样,只是一个副本。因此,您可以在标记中创建一个空目录,以标记该版本,然后在其中创建两个目录——一个用于有测试的版本,另一个用于没有测试的版本。

    我想要无测试标记,因为这样我可以导出该标记,以获得发送到客户端的源树;通常,客户无法获得测试的源代码。选项A是我提出问题后得出的答案:)是的。我现在理解了所有这些:)问题是,比起编写一个脚本来维护更多的工作,这个脚本准备了一个带有标记的版本,其中包括要发送给客户机的测试;两者都达到了同样的效果。我发表文章是因为我认为这个方法可以编写脚本。目录将有一个命名约定。