10.8.7. Subversion 工作流

这里给出使用 Subversion 及其原生客户端的典型工作流示例。

[提示]提示

git-svn 软件包提供的客户端命令,可以作为使用 git 命令的 Subversion 工作流的一个另外选择。参见 第 10.6.4 节 “用于 Subversion 仓库的 Git”.

查看如下所示的 URL “file:///srv/svn/project“ 指向的 Subversion 项目上所有可用的模块。

  1. $ svn list file:///srv/svn/project
  2. module1
  3. module2
  4. ...

按如下所示的检出 “module1/trunk“ 到 “module1“ 目录。

  1. $ cd ~/path/to
  2. $ svn co file:///srv/svn/project/module1/trunk module1
  3. $ cd module1

按需修改里面的内容。

通过如下所示的命令来检查改变,其作用相当于使用 “diff -u [repository] [local]“。

  1. $ svn diff

你发现自己改坏了 “file_to_undo“ 文件,而其他的文件都是好的。

按如下所示的用 Subversion 中的干净副本来覆盖 “file_to_undo“ 文件。

  1. $ svn revert file_to_undo

按如下所示的把已经更新了的本地源目录树保存到 Subversion。

  1. $ svn ci -m "Describe change"

按如下所示的创建 “file_to_add“ 文件并把它添加到 Subversion。

  1. $ vi file_to_add
  2. $ svn add file_to_add
  3. $ svn ci -m "Added file_to_add"

按如下所示更新工作拷贝到 Subversion 中的最新版本。

  1. $ svn up

当心以 “C filename“ 开头的行,这意味着冲突的改变。

查看文件中未经修改的代码,例如 “filename.r6“, “filename.r9“ 和 “filename.mine“ 文件。

查找文件中的 “<<<<<<<“ 和 “>>>>>>>“ 来获得冲突的改变的信息。

按需更改文件来解决冲突。

按如下所示添加一个发布标签 “Release-1“。

  1. $ svn ci -m "last commit for Release-1"
  2. $ svn cp file:///srv/svn/project/module1/trunk file:///srv/svn/project/module1/tags/Release-1

继续编辑文件。

按如下所示移除发布分支 “Release-1“。

  1. $ svn rm file:///srv/svn/project/module1/tags/Release-1

按如下所示把改变签入到 Subversion。

  1. $ svn ci -m "real last commit for Release-1"

按如下所示在最新的 Subversion 主干的基础上重新添加发布分支 “Release-1“。

  1. $ svn cp file:///srv/svn/project/module1/trunk file:///srv/svn/project/module1/tags/Release-1

按如下所示在 “module1/tags/Release-initial“ 路径指定的最初版本的基础上再创建一个路径为 “module1/branches/Release-initial-bugfixes“ 的分支,并把它签出到 “~/path/to/old“ 目录。

  1. $ svn cp file:///srv/svn/project/module1/tags/Release-initial file:///srv/svn/project/module1/branches/Release-initial-bugfixes
  2. $ cd ~/path/to
  3. $ svn co file:///srv/svn/project/module1/branches/Release-initial-bugfixes old
  4. $ cd old
[提示]提示

使用 “module1/trunk@{2005-12-20}“ (ISO 8601 日期格式) 而不是 “module1/tags/Release-initial“ 来指定分支创建时候的日期。

在基于原始版本的 “Release-initial-bugfixes“ 分支的本地源目录树上工作。

独自在 “Release-initial-bugfixes“ 分支上工作…直到有其他人加入到此分支。

按如下所示同步其他人在此分支上改动的文件。

  1. $ svn up

按需更改文件来解决冲突。

按如下所示把改变签入到 Subversion。

  1. $ svn ci -m "checked into this branch"

按如下所示更新本地目录树为主干的最新版本。

  1. $ svn switch file:///srv/svn/project/module1/trunk

按如下所示通过合并 “Release-initial-bugfixes“ 分支的方式来更新本地目录树 (内容为主干的最新版本)。

  1. $ svn merge file:///srv/svn/project/module1/branches/Release-initial-bugfixes

用编辑器来解决冲突。

按如下所示把改变签入到 Subversion。

  1. $ svn ci -m "merged Release-initial-bugfixes"

按如下所示创建归档。

  1. $ cd ..
  2. $ mv old old-module1-bugfixes
  3. $ tar -cvzf old-module1-bugfixes.tar.gz old-module1-bugfixes
  4. $ rm -rf old-module1-bugfixes
[提示]提示

你能够用像 “http://…“ 和 “svn+ssh://…“ 这样格式的 URL 来替代 “file:///…“ URL。

[提示]提示

通过 “svn co file:///srv/svn/project/module1/trunk/subdir module1/subdir“ 等命令,你可以只签出 “module1“ 的一个子目录。

表 10.15. 值得注意的 Subversion 命令选项 (使用时作为 svn(1) 的第一个参数)

选项说明
—dry-run测试,没有影响
-v显示 svn 活动的详细信息