SVN:为旧版本创建一个文件夹

时间:2010-11-23 14:13:39

标签: svn versioning

我对修订控制系统很初学,所以请原谅我。

我的项目包含两个较小的应用程序,都在自己的SVN存储库中。另外,我在这些应用程序之间共享了一个存储库(svn:externals)。

发布新版本时,我想为该版本创建一个文件夹(包括来源,文档等)。单个应用程序的存储库应如下所示:

.UI
    . "old versions"
        . 1.0
        . 2.0
        . 2.5
    . trunk (current development version 3.0)

所以我的问题是:

  1. 这种结构的正确名称是什么(在SVN中)?
  2. 我如何创造它?
  3. 是否可以冻结旧版本(阻止更改该文件夹)?
  4. 有没有更好的方法来实现这个目标?

3 个答案:

答案 0 :(得分:3)

  1. “tags”是此文件夹的标准名称。
  2. “svn copy”是您创建它的朋友。许多持续集成产品都可以选择自动标记构建。
  3. 是的,您可以使用“预提交挂钩”冻结它们(见下文。)
  4. 这是做事的标准方式。如果你偏离太远,你会混淆其他用户。

  5. 我们在这里使用的示例pre-comit hook(对于windows):

    @echo off
    SET SVNLOOK=C:\Program Files\CollabNet Subversion Server\svnlook.exe
    SET GREP=D:\SVN\REPO\hooks\grep.exe
    
    REM Prevent changes to tags.
    ("%svnlook%" changed -t %2 %1 | "%grep%" "^U.*/tags/") && (echo Cannot commit an update to a tag.>&2 && exit 1)
    
    REM Prevent commits without comments.
    ("%svnlook%" log -t %2 %1 | "%grep%" "[a-zA-Z0-9]") || (echo You must specify a comment for all actions.>&2 && exit 1)
    
    exit 0
    

    要手动创建标记,请使用如下命令:

    svn copy "http://your/repo/UI/trunk"  "http://your/repo/UI/tags/v3.0" -m "Tagging v3.0"
    

答案 1 :(得分:1)

  1. 分支,标签和主干
  2. 在结帐中创建文件夹,然后提交它们,然后使用“branch / tag”(tortoiseSVN)或“svn copy”为cmd行svn创建主干标签
  3. 您在某个时刻标记了自己的行李箱,例如v1,v2,v3 - 这会保留当前存储库的记录,您可以随时返回它们
  4. 这是实现此目的的方法
  5. 分支用于主要更改,您不应该在主干上执行(如果您正在与一组开发人员合作)。您创建一个分支,每天将分支合并到分支上以避免以后发生合并冲突。然后,当完成分支上的主要更改时,您将合并回主干。

    当您准备好发布时,您可以创建整个主干的标记。然后从那里释放。如果将来您想要回到某个版本,那么您的标签中会有该历史参考。标签只指向某个时间点的存储库,例如例如,当你的行李箱在转速为35335时,转速为25123。

答案 2 :(得分:1)

您应该在http://svnbook.com处查看Subversion在线参考的前几章。这将为您提供版本控制和Subversion的快速良好开端。

你正在做的事情与Subversion的工作方式非常接近。你有那些目录吗?

在标准的Subversion设置中,您可以设置“标签”,“分支”和“主干”目录。有些人将这些设置在他们的存储库的根目录上,其他人则将它们设置在每个项目的根目录下。

例如:

svn://svn/trunk/proj1
svn://svn/trunk/proj2
svn://svn/branches/proj1/1.2
svn://svn/branches/proj2/3.4

svn://svn/proj1/trunk
svn://svn/proj2/trunk
svn://svn/proj1/branches/1.2
svn://svn/proj2/branches/3.4

我见过的大多数网站都是最后一种方式,但是第一种方式可以带来优势(主要是因为使用svn:externals而且当你结帐时,你的结帐不是默认情况下调用trunk

您需要做的就是调用“旧版本”目录tags并完成所有设置:

svn://svn/UI/tags/1.0
svn://svn/UI/tags/2.0
svn://svn/UI/tags/2.5
svn://svn/UI/trunk

如果忘记制作标签,请不要惊慌! Subversion的一大优点是存储库的版本号。这有点像每次提交时制作标签。如果您在发布版本时可以找到版本号(通常是通过查看svn log),则可以复制该版本以创建标记:

$ svn cp -r1234 svn://svn/UI/trunk  svn://svn/UI/tags/2.0

如您所见,您使用svn cp命令创建标记和分支。顺便说一句,在没有意识到的情况下修改标签非常容易。在大多数站点中,它们都有一个预提交钩子,可以阻止大多数用户在tags目录下进行提交(这意味着你必须创建标签),或者它们允许用户创建一个标签(通过svn cp)但是不要让用户在创建标签后对其进行修改。如果你想查看它,我在http://dl.dropbox.com/u/433257/new_svn_hooks.zip有一个Perl版本的预提交钩子。