23

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

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

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

4

2 回答 2

52

您始终可以使用该-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 不实现标记分支,除非作为副本。这并不罕见。Perforce 以同样的方式实现分支。事实上,一旦你习惯了它,它就会非常有效:

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

直接来自SVN 文档

如果您想创建与 HEAD 修订版中完全相同的 /calc/trunk 快照,请复制它:

$ 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 命令来指定它

(强调我的)

于 2012-06-22T19:04:08.473 回答