当用户对某个文件或目录执行了复制和重命名操作之后,Subversion 存储库就会跟踪该历史记录。不幸的是,在 Subversion 1.0 中,只有一个客户端子命令实际利用了此功能,即 svn log。大量的其它命令(例如 svn diff 和 svn cat)应该自动跟踪重命名历史记录,但却未实现此功能。
在所有这些情况下,基本的解决方法就是在旧版本中使用 'svn log -v' 发现正确的路径。
例如,假设您在修订版 200 中将 /trunk 复制到 /branches/mybranch 中,然后在后续的版本中将某些更改提交到 /branches/mybranch/foo.c 中。现在,您希望比较文件的 80 修订版和 250 修订版。
如果您具有该分支的一个工作副本并运行 svn diff -r80:250 foo.c,您将看到一条有关在修订版 80 中不存在 /branches/mybranch/foo.c 的错误信息。要补救,应该在您的分支或文件中运行 svn log -v 以便发现在修订版 200 之前该目录就已被命名为 /trunk/foo.c,然后直接比较这两个 URL: $ svn diff http://.../trunk/foo.c@80 \ http://.../branches/mybranch/foo.c@200 掌握创建分支的时机
这是一个容易引起争议的问题,事实上它取决于您的软件项目培养。没有规定通用的策略,仅在此描述三种常见的。
从不分支系统(常用于还没有可运行代码的初始项目。) 用户将他们的日常工作提交到 /trunk 中。 用户开始提交一系列复杂更改时,/trunk 偶尔会“损坏”(无法进行编译或功能测试失败)。
优点:此策略非常容易遵守。新开发人员进入的门槛很低。不需要学习如何进行分支或合并。