版本日志对话框

Posted on Posted in 6.日常使用指南

版本日志对话框

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

版本日志对话框可以获取所有的日志信息,并将其显示出来。对话框的视图分成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.