版本日志对话框

对于每次进行修改和提交,你应该有针对性地留下日志信息。这样,你就可以在以后方便地看到你都做了什么,为什么这么做。当然这么做还是你拥有了开发过程的详细日志。

版本日志对话框可以获取所有的日志信息,并将其显示出来。对话框的视图分成3个面板。

当然,对话框的作用不止于此——它提供了右键菜单,通过它可以获取更多的项目历史信息。

调用版本日志对话框

图 5.15. 版本日志对话框

版本日志对话框


有几种途径可以调出日志对话框:

  • 从右键菜单的TortoiseSVN子菜单中调用

  • 从属性页中调用

  • 在更新结束后,从进度对话框中调用。在这里,日志对话框只显示你上一次更新以来的版本变化。

版本日志动作

顶部面板有个动作列,包含了此版本的动作概要图标。有四个不同的图标,每个都在自己的列显示。

If a revision modified a file or directory, the modified icon is shown in the first column.

If a revision added a file or directory, the added icon is shown in the second column.

If a revision deleted a file or directory, the deleted icon is shown in the third column.

If a revision replaced a file or directory, the replaced icon is shown in the fourth column.

获得更多信息

图 5.16. 版本日志对话框的顶部面板的右键菜单

版本日志对话框的顶部面板的右键菜单


The top pane of the Log dialog has a context menu that allows you to access much more information. Some of these menu entries appear only when the log is shown for a file, and some only when the log is shown for a folder.

  • 将你的工作版本与选中的版本进行比较。默认的比较工具是与TortoiseSNV一同发布的TortoiseMerge,如果日志对话框是针对文件夹的,那么就会出现一个被修改的文件的列表,你可以单独地查看每个文件所做的修改。

  • 将选中的版本作为单一差异文件(GNU补丁格式)查看。相对于可视化的文件比较器,它更难阅读,但它将所有的变化显示在一个格式更为紧凑的文件中。

  • 比较选择的版本和以前版本。它与你比较工作副本类似。

  • 追溯选中的版本,和你的工作基础文件,使用可视化差异工具比较追溯报告。参阅 “追溯不同点”一节 以获得更多信息(仅对于文件)。

  • 追溯选中的版本和旧版本,用可视化差异工具比较结果(仅对于目录)。

  • 将选中的版本保存到文件,你可以得到一份该文件的旧版本(仅对于文件)。

  • 用此文件类型的默认查看器,或你指定的程序打开选中的文件(仅对于文件)。

  • 追溯文件直到选中的版本(仅对于文件)。

  • 打开版本库浏览器,基于选中的版本,在版本库中检查选中的文件或目录。

  • 从选中的版本建立一个分支/标记。这个选项很有用。比如: 如果你提交了某些你不想使其进入发行版的修改,却忘记了为此建立标记。

  • 将你的工作副本更新到选中的版本。如果你想要你的工作副本折返到过去的某个时间,那这个功能就很好用。你最好是更新工作副本的整个目录而不是单一某个文件,因为如果只更新某个文件,你的工作副本就可能不一致,从而导致你无法提交任何修改。

  • 还原选中版本所做的修改。还原的内容只在你的工作副本中,所以此操作完全不会影响版本库!要注意的是,这个操作仅仅还原该版本中的修改。不是将整个文件替换成选中的那个版本。它对于已经做过其它无关修改的还原早期修改非常有用。如果你做了本地修改,此命令将会合并修改到工作副本。

  • 恢复到某个以前的版本。如果你做了多处修改,然后决定要返回到版本 N,你就可以使用这个命令。再次说明,恢复的修改位于你的工作副本,在你提交之前,并不会影响版本库。注意,这将会丢弃从那个版本以来的所有修改,使用选中的版本来替换文件/文件夹。

  • Merge the selected revision(s) into a different working copy. A folder selection dialog allows you to choose the working copy to merge into, but after that there is no confirmation dialog, nor any opportunity to try a dry run. It is a good idea to merge into an unmodified working copy so that you can revert the changes if it doesn't work out! This is a useful feature if you want to merge selected revisions from one branch to another.

  • 检出你选择的目录的选中版本,创建一个全新副本。它弹出对话框,让你确认URL和版本,并且选择保存的位置。

  • 导出选择的文件/目录的选中版本。它弹出对话框,让你确认URL和版本,选择导出位置。

  • 编辑之前提交时的日志信息或是作者。请阅读“修改日志消息和作者”一节,了解其工作原理。

  • 将选中版本的详细日志信息复制到剪贴板。它会复制版本号,作者,日期,日志信息,以及每个版本的改变项目列表。

  • 在日志信息中搜索你输入的的文字。这个操作搜索日志信息,也搜索由Subversion建立的提交行为总结(最底部的面板中的内容)。搜索大小写无关。

图 5.17. 选种两个版本的顶部面板的右键菜单

选种两个版本的顶部面板的右键菜单


如果你使用Ctrl组合键一次选中了两个版本,右键菜单有所改变:

  • 使用可视化差异比较工作比较两个选中的版本。默认的比较工作是与TortoiseSVN一起提供的TortoiseMerge。

    如果你是针对文件夹选中这个选项,则会弹出一个对话框列出修改过的文件,提供了更多的差异比较选项。请参考比较版本对话框获得详情: “比较文件夹”一节

  • Blame the two revisions and compare the blame reports using a visual difference tool. Read “追溯不同点”一节 for more detail.

  • 使用单一差异文件显示差异。这对文件和文件夹都有效。

  • 如前所述将日志消息复制到剪贴板。

  • 如前所述可以搜索日志消息。

If you select two or more revisions (using the usual Ctrl or Shift modifiers), the context menu will include an entry to Revert all changes which were made in the selected revisions. This is the easiest way to rollback a group of revisions in one go.

You can also choose to merge the selected revisions to another working copy, as described above.

图 5.18. 日志对话框的底部面板的右键菜单

日志对话框的底部面板的右键菜单


日志对话框的底部面板也有右键菜单,你可以:

  • Show changes made in the selected revision for the selected file. This context menu is only available for files shown as modified.

  • Blame the selected revision and the previous revision for the selected file, and compare the blame reports using a visual diff tool. Read “追溯不同点”一节 for more detail.

  • 用默认查看器或你指定的程序打开选中文件的选中版本。

  • 还原选中文件的选中版本所作的变更。

  • 查看选中项的Subversion属性。

  • 显示选中的单个文件的版本日志。

  • 将选中的版本保存成文件,你可以得到一份该文件的旧版本。

提示

你可能会注意到,我们有时候说改变,有时候说差异。它们的区别在哪儿?

Subversion uses revision numbers to mean 2 different things. A revision generally represents the state of the repository at a point in time, but it can also be used to represent the changeset which created that revision, eg. “Done in r1234” means that the changes committed in r1234 implement feature X. To make it clearer which sense is being used, we use two different terms.

如果你选择了两个版本 N 和 M,上下文菜单会显示这两个版本的差异。用 Subversion 术语说,就是diff -r M:N

如果你选择了一个版本 N,上下文菜单会显示这个版本的改变。用 Subversion 术语说,就是diff -r N-1:Ndiff -c N

The bottom pane shows the files changed in all selected revisions, so the context menu always offers to show changes.

获取更多的日志信息

日志对话框并不总是显示所有曾经的修改,日志不显示的可能原因如下:

  • 对于一个大的库,可能存在几百上千个改动,全部得到它们可能要花上很久的时间。通常你只关心最近的修改。默认情况下,日志消息限制只获取100条,但你可以在TortoiseSVN设置中修改这个值 (“TortoiseSVN的设置”一节),

  • 复制/重命名时停止复选框被选中时, 如果选中的文件或文件夹是从版本库中的其他地方复制而来的,显示日志将停止在该点。这对于查看分支(或标记)时很有用,因为它会停在分支的根节点上,可以快速查看该分支的修改。

    一般情况下你可以不要勾选它。 TortoiseSVN会记住它的状态,以改进性能。

    如果你在从合并对话框中调用的显示日志对话框,那么这个复选框默认将总是选中的。这是由于合并通常都是查看分支中的修改, 获取分支的根之前的日志在这种情况下通常没有什么意义。

    注意,Subversion当前是用复制/删除来实现重命名的,所以重命名一个文件或文件夹也会造成日志显示停止(如果选择了复制/重命名时停止)在该点。

如果你要查看更多的日志信息,点击下100个,以获取下100个日志信息。如果有需要你可以多次重复这个操作。

这个按钮旁边的是一个多功能按钮,它可以记住上一次你要它进行的操作。点击它上面的箭头,可以看到更多的选项。

如果你要查询指定范围的版本,使用显示范围 ...。这会出现一个对话框,要求输入开始和结束的版本。

如果你要查询从最新版本直到版本1的所有的日志消息,使用显示所有

合并跟踪特性

Subversion 1.5 and later keeps a record of merges using properties. This allows us to get a more detailed history of merged changes. For example, if you develop a new feature on a branch and then merge that branch back to trunk, the feature development will show up on the trunk log as a single commit for the merge, even though there may have been 1000 commits during branch development.

图 5.19. 日志对话框显示合并跟踪版本

日志对话框显示合并跟踪版本

If you want to see the detail of which revisions were merged as part of that commit, use the Include merged revisions checkbox. This will fetch the log messages again, but will also interleave the log messages from revisions which were merged. Merged revisions are shown in grey because they represent changes made on a different part of the tree.

Of course, merging is never simple! During feature development on the branch there will probably be occasional merges back from trunk to keep the branch in sync with the main line code. So the merge history of the branch will also include another layer of merge history. These different layers are shown in the log dialog using indentation levels.

修改日志消息和作者

有时你可能想要修改你曾经输入的日志消息,也许是因为有拼写错误或是你想改进消息内容,或是其他别的原因。偶尔你还想修改提交者,可能是你忘了设置认证等原因。

Subversion lets you change both the log message and the author of revisions any time you want. But since such changes can't be undone (those changes are not versioned) this feature is disabled by default. To make this work, you must set up a pre-revprop-change hook. Please refer to the chapter on Hook Scripts in the Subversion Book for details about how to do that. Read “钩子脚本”一节 to find some further notes on implementing hooks on a Windows machine.

一旦你按需要为服务器设置了钩子,你就可以使用日志对话框顶部面板的右键菜单来修改任意版本的作者和日志信息了。

警告

由于Subversion的版本属性不受版本控制,对于这种属性的修改(如 svn:log提交信息属性将永久覆盖该属性之前的值。

过滤日志信息

如果你只想要显示上千条日志中你所感兴趣的日志,你可以使用日志对话框顶部的过滤器控件。开始和结束日期控件允许你查看指定日期范围内的输出。查找框帮你查出含有指定内容的信息。

Click on the search icon to select which information you want to search in, and to choose regex mode. Normally you will only need a simple text search, but if you need to more flexible search terms, you can use regular expressions. If you hover the mouse over the box, a tooltip will give hints on how to use the regex functions. You can also find online documentation and a tutorial at http://www.regular-expressions.info/.

要注意的是,这些过滤器只对已经获取的信息有效。它们并不从版本库中下载信息。

You can also filter the path names in the bottom pane using the Hide unrelated changed paths checkbox. Related paths are those which contain the path used to display the log. If you fetch the log for a folder, that means anything in that folder or below it. For a file it means just that one file. The checkbox is tristate: you can show all paths, grey out the unrelated ones, or hide the unrelated paths completely.

Sometimes your working practices will require log messages to follow a particular format, which means that the text describing the changes is not visible in the abbreviated summary shown in the top pane. The property tsvn:logsummary can be used to extract a portion of the log message to be shown in the top pane. Read “TortoiseSVN 项目属性”一节 to find out how to use this property.

统计信息

统计按扭,可以显示一些你感兴趣的关于日志对话框中版本的信息。可以显示已经有几个作者做了工作,他们各提交了几次,按周的统计,等等。现在,你可以发现一个大概情况: 谁最勤快,谁偷懒。;-)

统计页

此页可以提供所有你可以想到的数据,特别是周期和包括的版本数,还有一些最大/最小/平均值。

作者提交次数统计页

图 5.20. 作者提交次数统计柱状图

作者提交次数统计柱状图


此图用简单柱状图、叠加柱状图或饼图显示了哪些作者已经在项目中活跃了。

图 5.21. 作者提交次数统计饼图

作者提交次数统计饼图


Where there are a few major authors and many minor contributors, the number of tiny segments can make the graph more difficult to read. The slider at the bottom allows you to set a threshold (as a percentage of total commits) below which any activity is grouped into an Others category.

按日期提交统计页

图 5.22. 按日期提交统计图

按日期提交统计图


本页图示了以提交次数作者作为条件的项目行为统计。这里可以看出项目什么时候有人在工作,以及什么人在什么时候进行了工作。

如果有多个作者,你就会在图中看到多行。有两种视图可用正常,在这里,每个作者的行为都相对于基线;叠加,在这里每个作者的行为是相对于他的下面那条线。后一种视图避免了线的交叉,对于图来说更明了,但对查看一个作者的输出比较不直观。

By default the analysis is case-sensitive, so users PeterEgan and PeteRegan are treated as different authors. However, in many cases user names are not case-sensitive, and are sometimes entered inconsistently, so you may want DavidMorgan and davidmorgan to be treated as the same person. Use the Authors case insensitive checkbox to control how this is handled.

注意,统计只包括了日志对话框中的那段时期。如果日志对话框中只显示一个版本,那么统计就没有什么意义了。

离线方式

If the server is not reachable, and you have log caching enabled you can use the log dialog and revision graph in offline mode. This uses data from the cache, which allows you to continue working although the information may not be up-to-date or even complete.

刷新视图

If you want to check the server again for newer log messages, you can simply refresh the view using F5. If you are using the log cache (enabled by default), this will check the repository for newer messages and fetch only the new ones. If the log cache was in offline mode, this will also attempt to go back online.

If you are using the log cache and you think the message content or author may have changed, you can use Shift-F5 or Ctrl-F5 to re-fetch the displayed messages from the server and update the log cache. Note that this only affects messages currently shown and does not invalidate the entire cache for that repository.