【问题标题】:How do I create a tag from an old revision in Subversion when using Assembla?使用 Assembla 时,如何从 Subversion 中的旧版本创建标签?
【发布时间】:2012-06-25 02:57:00
【问题描述】:

我使用 Assembla 来管理我的 Subversion 存储库。我已经开始对我的代码库进行一些重大修改,并想为我最近的生产版本创建一个标签(我在几周前将该版本推送到生产环境时忘记了这样做)。

我目前使用的是修订版 588,并且想要创建修订版 577 的标签。如何在 Assembla 中使用 Subversion 从命令行执行此操作?

假设我的 Assembla SVN URL 是:https://subversion.assembla.com/svn/my_assembla_svn_directory/

【问题讨论】:

    标签: svn branch assembla


    【解决方案1】:

    您始终可以使用-r 参数来引用特定版本。这样做时,您还可以使用@rev 修订版固定来确保您指的是特定修订版中的 Subversion 修订版的布局。下面将从修订版 577 上的主干创建一个标签,并将此标签称为 REV-1.2

    $ svn cp -r 577 https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk
        https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REV-1.2
    

    如果您没有trunkbranchestags 目录,则需要移动您的工作以创建一些:

    $ # Move the current directory to the "trunk"
    $ svn cp https://subversion.assembla.com/svn/my_assembla_svn_directory \
        https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk
    
    $ # Make a corresponding tags and branches directories too
    $ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/branches
    $ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/tags
    
    $ # Now, we can delete the old location. Let your developers know this,
    $ # so they're not surprised by this and will be able to do a "svn relocate"
    $ svn delete https://subversion.assembla.com/svn/my_assembla_svn_directory/
    
    $ # Whoops. I should have done the tagging when I had a chance. 
    $ #Oh well, we'll use the `@rev` pinning:
    
    $ svn -r557 cp https://subversion.assembla.com/svn/my_assembla_svn_directory@557 \
          https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REL-1.2
    

    Subversion 不实现 taggingbranching 除非作为副本。这并不罕见。 Perforce 以同样的方式实现分支。事实上,一旦你习惯了它,它就会非常有效:

    • 很容易看到有效的分支和标签(只需在正确的目录上做一个svn ls
    • 标签和分支的完整历史很容易看到。您可以查看更改的人员、时间、原因等。
    • 显示标签或分支的完整历史记录。如果有人更改了标签或分支,您会非常清楚地看到是谁做的。
    • 当开发人员在各种分支和主干中挑选要分支或标记的内容时,它不鼓励您在许多其他版本控制系统中看到的仓促分支类型。这使得跟踪历史非常困难。 Subversion 的方案鼓励您将分支和标签视为影响项目中的所有文件。

    【讨论】:

    • 不幸的是,没有简单的命令可以从 /tags/REV-1.2 中获取修订版 577。如果您针对该标签运行“svn info”,它将显示您运行追溯标记命令时的 HEAD + 1。例如,这会使获取两个标签之间的提交变得困难。
    【解决方案2】:

    直接来自SVN documentation

    如果您想创建与 /calc/trunk 完全相同的快照 HEAD 版本,复制一份:

    $ svn copy http://svn.example.com/repos/calc/trunk \
               http://svn.example.com/repos/calc/tags/release-1.0 \
               -m "Tagging the 1.0 release of the 'calc' project."
    
    Committed revision 902.
    

    此示例假定 /calc/tags 目录已存在。 (如果 它没有,您可以使用 svn mkdir 创建它。)复制后 完成后,新的 release-1.0 目录永远是一个快照 /trunk 目录在您制作时查看了 HEAD 修订版 副本。当然,您可能希望更准确地了解 您复制哪个修订版,以防其他人可能已经提交 在您不查看时对项目进行更改。 所以如果你知道 /calc/trunk 的修订版 901 正是您想要的快照,您可以 通过将 -r 901 传递给 svn copy 命令来指定它

    (强调我的)

    【讨论】:

      猜你喜欢
      • 2011-08-05
      • 2015-03-03
      • 2010-10-23
      • 2012-01-17
      • 2023-02-09
      • 2010-11-17
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多