版本日志对话框

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

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

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

调用版本日志对话框

图 4.15. 版本日志对话框

版本日志对话框


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

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

  • 从属性页中调用

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

如果版本库不可用,你将会看到 要离线? 对话框,在 “离线方式”一节 中有详细描述。

版本日志动作

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

如果某个版本修改了文件或目录,已修改 图表就会在首列显示。

如果某个版本增加了文件或目录,已增加 图表就会在第二列显示。

如果某个版本删除了文件或目录,已删除 图表就会在第三列显示。

如果某个版本替换了文件或目录,已替换 图标就会在第四列显示。

获得更多信息

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

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


日志对话框的顶部面板有一个右键菜单,通过此菜单你可以获得更多的信息。这些菜单条目中的有些内容只会在显示文件日志时出现,有些内容只会在显示文件夹日志时出现。

与工作副本比较

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

与工作基础版本比较并追溯

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

以标准差异文件显示改变

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

Compare with previous revision

比较选中的版本和以前版本。它与比较工作副本类似。对于文件夹,这个选项首先会显示已修改的文件对话框让你选择要比较的文件。

与前一版本比较并追溯

显示已修改的文件对话框,让你选择文件。追溯选中的版本和旧版本,用可视化差异工具比较结果(仅对于文件夹)。

保存版本至...

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

打开 / 打开方式...

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

追溯...

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

浏览版本库

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

从版本创建分支/标记

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

更新项目至版本

将你的工作副本更新到选中的版本。如果你想要你的工作副本折返到过去的某个时间,或者在版本库中有一系列提交而你想每次只更新工作副本一小步,那这个功能就很好用。你最好是更新工作副本的整个目录而不是单一某个文件,因为如果只更新某个文件,否则你的工作副本就可能不一致。

如果你想要永久撤销先前的更改,使用 复原到此版本

复原到此版本

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

如果你的工作副本处于未修改的状态,在执行此操作后,工作副本将会显示为已修改。如果你已经进行了本地修改,这个命令将会把撤销的改变合并至你的工作副本中。

内部的动作是 Subversion 对选中版本之后的修改内容执行了反向合并,撤销这些先前提交产生的影响。

如果在执行这个动作后你察觉到你需要撤销这次撤销并且让工作副本返回到先前没有修改的状态,你应该在 Windows 资源管理器中使用 TortoiseSVNSVN 还原, 这个命令将会丢弃本次撤销动作带来的修改。

如果你只是想看看某个文件或者文件夹在先前的版本是什么样子,使用 更新至版本保存版本为... 功能替代此操作。

复原此版本作出的修改

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

如果你的工作副本处于未修改的状态,在执行此操作后,工作副本将会显示为已修改。如果你已经进行了本地修改,这个命令将会把撤销的改变合并至你的工作副本中。

内部的动作是 Subversion 对这个版本的修改内容执行了反向合并,撤销先前提交产生的影响。

你可以使用上文复原到此版本中描述的撤销这次撤销

合并版本到...

合并选中的版本到不同的工作副本。可以通过文件夹选择对话框来确定合并到哪一个工作副本中,但是此操作没有冲突对话框,也没有尝试测试合并的机会。合并到未修改的工作副本是一个好主意,这样当合并不成功时你可以还原工作副本。当你想要将某个分支上选中的版本合并至其他分支时,这个功能很有用。

检出...

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

导出...

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

编辑作者 / 日志信息

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

显示版本属性

查看和编辑任何版本属性,不仅仅是日志信息和作者。参看 “修改日志消息和作者”一节

复制到剪贴板

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

查找日志信息...

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

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

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


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

比较版本差异

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

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

追溯版本

追溯两个版本,并使用可视化差异工具显示差异。详情请参考“追溯不同点”一节

以标准差异文件显示修改

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

复制到剪贴板

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

查找日志信息...

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

如果你用 CtrlShift 组合键选择了两个或多个版本,右键菜单将有一个选项,可以让你还原这些选中的版本中的修改。这是一次性还原一组版本中修改的最简方法。

你也可以合并选中的版本到别的工作副本,就像上面描述的那样。

如果所有选中的版本作者是相同的,你可以同时修改这些版本的作者。

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

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


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

显示改变

显示选中版本中的选中文件的改变。这个菜单条目只对显示为已修改的文件有效。

追溯改变

追溯选中文件的选中版本与前一个版本,使用可视化差异工具显示差异。详情请参阅“追溯不同点”一节

以标准差异格式显示改变

以标准差异格式显示改变。这个菜单条目只对显示为已修改的文件有效。

打开 / 打开方式...

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

追溯...

打开追溯对话框,你可以追溯到选中的版本。

复原此版本作出的修改

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

显示属性

查看选中项的Subversion属性。

显示日志

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

取得合并日志

显示被选中的单个文件的版本日志,包括合并修改。在 “合并跟踪特性”一节 中查看更多信息。

保存版本至...

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

提示

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

Subversion 使用版本号表达两个意思。版本号通常意味着版本库在那个时间的状态,也用来表达那个版本创建的结果集,例如 “r1234 所做” 意味着 r1234 版本提交的改变实现了特性 X。为了能更清晰的知道使用了哪个语义,我们使用两个不同的术语。

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

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

底部面板显示在所有选中版本中被修改的文件,所以右键菜单通常会提供显示改变

获取更多的日志信息

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

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

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

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

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

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

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

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

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

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

当前工作副本的版本

因为日志对话框从最新版本开始显示日志,而不是从当前工作副本的版本开始。还未被更新至工作副本中的版本的日志消息也经常会显示出来。为了使其更清楚,符合当前工作副本版本的提交信息使用粗体显示。

When you show the log for a folder the revision highlighted is the highest revision found anywhere within that folder, which requires a crawl of the working copy. This can be a slow operation for large working copies, and the log messages are not displayed until the crawl completes. If you want to disable or limit this feature you need to set a registry key HKCU\Software\TortoiseSVN\RecursiveLogRev as described in “注册表设置”一节.

合并跟踪特性

Subversion 1.5 及以后的版本使用属性保留合并记录。关于已合并的修改,我们可以获得更详细的历史。例如,你在分支中开发了一个新特性并且将此分支合并到主干,此特性开发将会以一次合并提交的形式显示在主干的日志中,即使在分支开发中可能有 1000 次提交。

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

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

如果你想查看此次提交中有哪些版本被合并的详细信息,选中 包含合并版本。这样将会再次获取日志信息,同时也会插入被合并的版本的日志信息。被合并的版本使用灰色显示,因为它们代表在版本库中不同部分的修改。

当然,合并绝非简单!在分支上进行特性开发过程中,也许不时的会将主干的内容合并至分支使分支保持同步。所以分支的合并历史将会包含其它层次的合并历史。这些不同层次的信息在日志对话框中使用不同的缩进级别显示。

修改日志消息和作者

版本属性完全不同于其它的 Subversion 属性。版本属性是关联于版本库中的特定版本号的描述项目,例如日志消息,提交日期和提交者名称(作者)。

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

Subversion允许你在任何时候修改日志消息和作者。但这种改变不可还原(不在版本控制之下),正因如此,这些功能默认是不可用的,如果要开启它,必须设置一个pre-revprop-change钩子。具体如何做,请参考《使用 Subversion 进行版本管理》的相关章节钩子脚本。在Windows机器上实现钩子的注意事项请阅读“服务器端钩子脚本”一节

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

警告

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

过滤日志信息

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

点击查找图标来选择你要查找信息的类型,并且选择正则表达式模式。一般情况下你只需要简单的文本查找,但是如果你需要更有弹性的查找规则,你就可以使用正则表达式。鼠标指针停留在文版框上面时,会显示如何使用正则表达式功能的的提示。你也可以在这里 http://www.regular-expressions.info/ 查看在线文档和指导。过滤器检查你的过滤字符串是否与日志条目匹配,并且只显示与过滤字符串匹配的条目。

要使过滤所有日志条目的结果中包含过滤字符串,在字符串的前面加一个感叹号('!')。例如,过滤字符串 !username 将会显示那些不是由 username 提交的条目。

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

你还可以使用隐藏无关的修改路径复选框来过滤底部面板中的路径名称。所谓相关路径,是指那些与日志相关的路径。对于一个文件夹的日志来说,相关路径就是该文件夹以其下的所有内容。对于一个文件的日志来说,相关路径就是与该文件的路径。该复选框是3态的: 可以显示所有的路径,将无关的内容灰色显示,或是完全隐藏无关路径。

有时,工作规范要求日志消息符合一个特定的格式,这就意味着描述修改的文本不能在顶部面板中以简短的摘要形式显示。属性 tsvn:logsummary 可以用于提取日志消息的一部分显示在顶部面板中。参阅 “TortoiseSVN 项目属性”一节 了解如何使用这个属性。

在版本库浏览器中没有日志格式化

因为格式化依赖于对 subversion 版本库的访问,所以只能在已签出的工作副本中看到结果。从远程获取属性是一个很慢的操作,所以你在从版本库浏览器中进行操作时不能看到这个特性。

统计信息

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

统计页

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

作者提交次数统计页

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

作者提交次数统计柱状图


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

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

作者提交次数统计饼图


其中有几个主要作者和许多辅助的贡献者。由于太小的部分会导致图形难于阅读,所以在底部有个滑动条,可以设置一个范围(占所有提交的百分比),在这个范围下的所有行为都整合成其他类。

按日期提交统计页

图 4.22. 按日期提交统计图

按日期提交统计图


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

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

默认统计是区别大小写的,也就是说用户 PeterEganPeteRegan 被认为是两个不同的作者。但在多数时候用户名并不区别大小写,有时会存在不一致,所以你可能希望 DavidMorgandavidmorgan 能被当成是同一个作者。使用作者区分大小写复选框来控制。

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

离线方式

图 4.23. 要离线对话框

要离线对话框


如果服务器不可用,并且你已经启用了日志缓存,那么你可以在离线方式下使用日志对话框和版本图。它使用缓存中的数据,使得你可以继续工作,尽管信息可能不是最新的甚至不完整。

这里你有三个选择:

立即离线

使用离线方式完成当前操作,但当下次需要日志数据时重新尝试链接版本库。

永久离线

保持离线方式,直到特别要求进行版本库检查。参见 “刷新视图”一节

取消

如果你不想使用失效的数据来继续操作,就取消吧。

选中设为默认值复选框使用你本次的选项作为以后的选择,避免再次显示此对话框。你可以通过 TortoiseSVN设置修改(或删除)此默认值。

刷新视图

如果你想再次检查服务器是否有新的日志消息,可以使用 F5 键来刷新视图。如果使用日志缓存(默认启用),这将会检查版本库是否有新的消息并且只获取新的消息。如果日志缓存处于离线模式,这将会尝试恢复在线模式。

如果使用日志缓存并且你认为消息内容或者作者可能被更改,你可以使用 Shift-F5Ctrl-F5 来从服务器重新获取显示的消息并更新日志缓存。注意: 此动作只影响当前显示的消息并不会影响此版本库的全部缓存。