手册

版本日志对话框

对于您所做的每个更改和提交,您都应该为该更改提供日志消息。这样,您以后就可以找出您所做的更改以及原因,并且您拥有开发过程的详细日志。

版本日志对话框检索所有这些日志消息并将其显示给您。显示分为 3 个窗格。

但它不仅仅是这些 - 它提供上下文菜单命令,您可以使用这些命令来获取有关项目历史记录的更多信息。

调用版本日志对话框

图 4.18 版本日志对话框

The Revision Log Dialog


您可以从多个地方显示日志对话框

  • 从 TortoiseSVN 上下文子菜单

  • 从属性页

  • 从更新完成后显示的进度对话框。然后,日志对话框仅显示自上次更新以来已更改的修订

  • 从仓库浏览器

如果仓库不可用,您将看到 想要离线吗? 对话框,如 名为“离线模式”的部分 中所述。

版本日志操作

顶部窗格有一个 操作 列,其中包含图标,这些图标总结了该修订中所做的操作。有四个不同的图标,每个图标都显示在自己的列中。

如果修订修改了文件或目录,则 修改 图标将显示在第一列中。

如果修订添加了文件或目录,则第二列将显示 添加 图标。

如果修订删除了文件或目录,则第三列将显示 删除 图标。

如果修订替换了文件或目录,则第四列将显示 替换 图标。

如果修订移动或重命名了文件或目录,则第四列将显示 移动 图标。

如果修订通过移动/重命名替换了文件或目录,则第四列将显示 移动替换 图标。

如果修订合并了文件或目录,则第四列将显示 合并 图标。

如果修订反向合并了文件或目录,则第四列将显示 反向合并 图标。

获取更多信息

图 4.19. 具有上下文菜单的修订日志对话框顶部窗格

The Revision Log Dialog Top Pane with Context Menu


日志对话框的顶部窗格有一个上下文菜单,允许您访问更多信息。其中一些菜单项仅在显示文件的日志时出现,而另一些菜单项仅在显示文件夹的日志时出现。

与工作副本比较

将选定的修订与您的工作副本进行比较。默认的 Diff 工具是 TortoiseMerge,它随 TortoiseSVN 一起提供。如果日志对话框是针对文件夹的,则会显示一个已更改文件的列表,并允许您单独查看对每个文件所做的更改。

与工作 BASE 比较和追溯

追溯选定的修订和您工作 BASE 中的文件,并使用可视化 diff 工具比较追溯报告。阅读 名为“追溯差异”的部分 以获取更多详细信息。(仅限文件)

以统一 diff 形式显示更改

以统一 diff 文件(GNU patch 格式)查看选定修订中所做的更改。这仅显示带有几行上下文信息的差异。它比可视化文件比较更难阅读,但会以紧凑的格式显示所有文件更改。

如果在单击菜单项时按住 Shift 键,则会先弹出一个对话框,您可以在其中设置统一 diff 的选项。这些选项包括忽略行尾和空格更改的能力。

与上一个修订比较

将选定的修订版本与上一个修订版本进行比较。这与与工作副本进行比较的方式类似。对于文件夹,此选项将首先显示更改的文件对话框,允许您选择要比较的文件。

与上一个修订版本进行比较和追溯

显示更改的文件对话框,允许您选择文件。追溯选定的修订版本和上一个修订版本,并使用可视化差异工具比较结果。(仅限文件夹)

将修订版本保存到...

将选定的修订版本保存到文件,以便您拥有该文件的旧版本。(仅限文件)

打开/使用...打开

使用该文件类型的默认查看器或您选择的程序打开选定的文件。(仅限文件)

追溯...

追溯文件到选定的修订版本。(仅限文件)

浏览仓库

打开仓库浏览器,以查看仓库中选定的文件或文件夹在选定修订版本时的状态。

从修订版本创建分支/标签

从选定的修订版本创建分支或标签。这在以下情况下很有用,例如,如果您忘记创建标签,并且已经提交了一些不应该包含在该版本中的更改。

将项目更新到修订版本

将您的工作副本更新到选定的修订版本。如果您希望您的工作副本反映过去的时间,或者仓库中已经进行了进一步的提交,并且您希望一次更新一个步骤,这将很有用。最好更新工作副本中的整个目录,而不仅仅是一个文件,否则您的工作副本可能会不一致。

如果您想永久撤消之前的更改,请使用 恢复到此修订版本

恢复到此修订版本

恢复到之前的修订版本。如果您已经进行了多次更改,然后决定确实要回到修订版本 N 的状态,那么这就是您需要的命令。更改将在您的工作副本中撤消,因此此操作 不会影响仓库,直到您提交更改。请注意,这将撤消选定修订版本之后进行的 所有更改,并将文件/文件夹替换为早期版本。

如果您的工作副本处于未修改状态,那么在您执行此操作后,您的工作副本将显示为已修改。如果您已经有了本地更改,此命令将 撤消更改合并到您的工作副本中。

内部发生的事情是,Subversion 对选定修订版本之后进行的所有更改执行反向合并,撤消了先前提交的影响。

如果您在执行此操作后决定要撤销撤销并将您的工作副本恢复到之前的未修改状态,您应该使用TortoiseSVN还原(在 Windows 资源管理器中),这将丢弃此反向合并操作所做的本地修改。

如果您只想查看文件或文件夹在早期版本中的样子,请使用更新到版本保存版本为...

还原此版本的更改

撤销在所选版本中进行的更改。更改将在您的工作副本中撤销,因此此操作不会影响存储库!请注意,这将仅撤销该版本中所做的更改;它不会用早期版本的整个文件替换您的工作副本。这对于在进行其他无关更改后撤销早期更改非常有用。

如果您的工作副本处于未修改状态,那么在您执行此操作后,您的工作副本将显示为已修改。如果您已经有了本地更改,此命令将 撤消更改合并到您的工作副本中。

内部发生的情况是 Subversion 对该版本执行反向合并,撤销其对先前提交的影响。

您可以按上述还原到此版本中的描述撤销撤销

合并版本到...

将选定的版本合并到不同的工作副本中。文件夹选择对话框允许您选择要合并到的工作副本,但之后没有确认对话框,也没有尝试测试合并的机会。最好将合并到未修改的工作副本中,以便在合并失败时可以还原更改!如果您想将选定的版本从一个分支合并到另一个分支,这是一个有用的功能。

签出...

在选定的版本中签出选定文件夹的新副本。这将弹出一个对话框,供您确认 URL 和版本,并选择签出的位置。

导出...

在选定的版本中导出选定的文件/文件夹。这将弹出一个对话框,供您确认 URL 和版本,并选择导出的位置。

编辑作者/日志消息

编辑附加到先前提交的日志消息或作者。阅读名为“更改日志消息和作者”的部分,了解其工作原理。

显示版本属性

查看和编辑任何修订属性,而不仅仅是日志消息和作者。请参考 名为“更改日志消息和作者”的部分

复制到剪贴板

将所选修订版本的日志详细信息复制到剪贴板。这将复制每个修订版本的修订号、作者、日期、日志消息和更改项列表。

搜索日志消息...

在日志消息中搜索您输入的文本。这将搜索您输入的日志消息以及 Subversion 创建的操作摘要(显示在底部窗格中)。搜索不区分大小写。

创建代码协作者审查...

此菜单仅在安装了 SmartBear 代码协作者工具时显示。首次调用时,将显示一个对话框,提示用户输入代码协作者和 SVN 的用户凭据。保存设置后,调用菜单时不再显示设置对话框,除非用户在执行菜单项时按住 Ctrl。配置和选定的修订版本用于调用代码协作者图形用户界面客户端,该客户端使用选定的修订版本创建新的审查。

图 4.20. 代码协作者设置对话框

The Code Collaborator Settings Dialog


图 4.21. 两个选定修订版本的顶部窗格上下文菜单

Top Pane Context Menu for 2 Selected Revisions


如果您同时选择两个修订版本(使用通常的 Ctrl 修饰符),上下文菜单将发生变化,并提供更少的选项

比较修订版本

使用可视化差异工具比较两个选定的修订版本。默认的 Diff-Tool 是 TortoiseMerge,它与 TortoiseSVN 一起提供。

如果您为文件夹选择此选项,将弹出一个对话框,列出已更改的文件并提供其他 diff 选项。有关比较修订版本对话框的更多信息,请阅读 名为“比较文件夹”的部分

责备修订版本

责备两个修订版本,并使用可视化差异工具比较责备报告。阅读 名为“责备差异”的部分 以了解更多详细信息。

将差异显示为统一 diff

将两个选定修订版本之间的差异显示为统一 diff 文件。这适用于文件和文件夹。

复制到剪贴板

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

搜索日志消息...

搜索日志消息,如上所述。

如果您选择两个或多个修订版本(使用通常的 CtrlShift 修饰符),上下文菜单将包含一个条目,用于还原在选定修订版本中进行的所有更改。这是以一种方式回滚一组修订版本的最佳方法。

您也可以选择将选定的修订合并到另一个工作副本中,如上所述。

如果所有选定的修订都具有相同的作者,则可以一次性编辑所有这些修订的作者。

图 4.22. 日志对话框底部窗格的上下文菜单

The Log Dialog Bottom Pane with Context Menu


日志对话框的底部窗格也有一个上下文菜单,允许您

显示更改

显示选定文件中选定修订所做的更改。

责备更改

责备选定文件中的选定修订和前一个修订,并使用可视化差异工具比较责备报告。阅读 名为“责备差异”的部分 以了解更多详细信息。

显示为统一差异

以统一差异格式显示文件更改。此上下文菜单仅适用于显示为 已修改 的文件。

打开/使用...打开

打开选定文件,可以使用该文件类型的默认查看器,也可以使用您选择的程序。

追溯...

打开责备对话框,允许您责备到选定的修订。

还原此版本的更改

还原该修订对选定文件所做的更改。

显示属性

查看选定项目的 Subversion 属性。

显示日志

显示选定单个文件的修订日志。

获取合并日志

显示选定单个文件的修订日志,包括合并的更改。在 名为“合并跟踪功能”的部分 中了解更多信息。

将修订版本保存到...

将选定的修订保存到文件,以便您拥有该文件的旧版本。

导出...

将此修订中的选定项目导出到文件夹,保留文件层次结构。

当在日志对话框的底部窗格中选择多个文件时,上下文菜单将更改为以下内容

图 4.23. 当选择多个文件时,日志对话框底部窗格的上下文菜单。

The Log Dialog Bottom Pane with Context Menu When Multiple Files Selected.


将修订版本保存到...

将选定的修订保存到文件,以便您拥有该文件的旧版本。

显示多个更改...

显示选定文件中选定修订所做的更改。请注意,显示更改功能被多次调用,这可能会打开多个选定差异工具的副本,或者只是在差异工具中添加一个新的比较选项卡。如果您选择了超过 15 个文件,系统将提示您确认操作。

打开多个本地...

这将使用注册到扩展名的应用程序打开与您选择的文件相对应的本地工作副本文件。[行为与您在 Windows 资源管理器中双击工作副本文件(s)时的行为相同]。根据您的文件扩展名与应用程序的关联方式以及应用程序的功能,这可能是一个缓慢的操作。在最坏的情况下,Windows 可能会为每个选定的文件启动应用程序的新实例。

如果您在调用此命令时按住 Ctrl 键,工作副本文件将始终加载到 Visual Studio 中。这仅在满足以下条件时有效:Visual Studio 必须在与 TortoiseProc.exe 相同的用户上下文中运行,并且具有相同的进程完整性级别[以管理员身份运行或不运行]。可能需要加载包含已更改文件的解决方案,尽管这不是严格必要的。只有磁盘上存在扩展名为 [.cpp, .h, .cs, .rc, .resx, .xaml, .js, .html, .htm, .asp, .aspx, .php, .css 和 .xml] 的文件才会被加载。一次最多可以将 100 个文件加载到 Visual Studio 中,并且这些文件始终作为新选项卡加载到当前打开的 Visual Studio 实例中。在 Visual Studio 中查看代码更改的好处在于,您可以使用 Visual Studio 中内置的代码导航、引用查找、静态代码分析和其他工具。

导出...

在选定的修订版中导出选定的文件/文件夹。这将弹出一个对话框,供您确认 URL 和修订版,并选择导出位置。

提示

您可能会注意到,有时我们指的是更改,有时指的是差异。有什么区别?

Subversion 使用修订号来表示两种不同的含义。修订版通常代表存储库在某个时间点的状态,但它也可以用来表示创建该修订版的变更集,例如 在 r1234 中完成 表示在 r1234 中提交的更改实现了功能 X。为了更清楚地说明使用哪种含义,我们使用了两个不同的术语。

如果您选择两个修订版 N 和 M,上下文菜单将提供显示这两个修订版之间的 差异。在 Subversion 术语中,这是 diff -r M:N

如果您选择单个修订版 N,上下文菜单将提供显示该修订版中所做的 更改。在 Subversion 术语中,这是 diff -r N-1:Ndiff -c N

底部窗格显示所有选定修订版中更改的文件,因此上下文菜单始终提供显示 更改

获取更多日志消息

日志对话框并不总是显示所有更改,原因有很多

  • 对于大型代码库,可能存在数百甚至数千个更改,获取所有更改可能需要很长时间。通常,您只对最近的更改感兴趣。默认情况下,获取的日志消息数量限制为 100 条,但您可以在 TortoiseSVN设置 (名为“TortoiseSVN 对话框设置 1”的部分) 中更改此值。

  • 当选中 在复制/重命名时停止 框时,显示日志将在所选文件或文件夹从存储库中的其他位置复制的位置停止。这在查看分支(或标签)时很有用,因为它会在该分支的根目录处停止,并快速指示仅在该分支中进行的更改。

    通常,您希望取消选中此选项。TortoiseSVN 会记住复选框的状态,因此它会尊重您的偏好。

    当从合并对话框中调用显示日志对话框时,该框默认情况下始终处于选中状态。这是因为合并最常查看分支上的更改,并且在该实例中,返回到分支根目录之外没有意义。

    请注意,Subversion 当前将重命名实现为复制/删除对,因此如果选中此选项,重命名文件或文件夹也会导致日志显示停止。

如果要查看更多日志消息,请单击 下一个 100 以检索接下来的 100 条日志消息。您可以根据需要重复此操作。

此按钮旁边有一个多功能按钮,它会记住您上次使用它的选项。单击箭头以查看提供的其他选项。

如果要查看特定范围的修订版,请使用 显示范围...。然后,一个对话框会提示您输入开始和结束修订版。

如果要查看从 HEAD 到修订版 1 的 所有 日志消息,请使用 显示全部

如果在日志对话框打开时有其他提交,要刷新最新的修订版,请按 F5 键。

要刷新日志缓存,请按 Ctrl-F5 键。

当前工作副本修订版

由于日志对话框显示的是从 HEAD 开始的日志,而不是从当前工作副本修订版开始的日志,因此通常会发生这种情况:显示了尚未在您的工作副本中更新的内容的日志消息。为了使这一点更加清晰,与您工作副本中拥有的修订版相对应的提交消息将以粗体显示。

当您显示文件夹的日志时,突出显示的修订版是该文件夹内任何地方找到的最高修订版,这需要对工作副本进行爬取。爬取在单独的线程中进行,以免延迟显示日志,但因此文件夹的突出显示可能不会立即出现。

合并跟踪功能

Subversion 1.5 及更高版本使用属性记录合并。这使我们能够获得更详细的合并更改历史记录。例如,如果您在分支上开发一个新功能,然后将该分支合并回主干,则功能开发将在主干日志中显示为合并的单个提交,即使在分支开发期间可能存在 1000 次提交。

图 4.24。显示合并跟踪修订版的日志对话框

The Log Dialog Showing Merge Tracking Revisions

如果您想查看哪些修订版作为该提交的一部分被合并的详细信息,请使用 包含合并的修订版 复选框。这将再次获取日志消息,但也会将合并的修订版的日志消息交织在一起。合并的修订版以灰色显示,因为它们代表对树的另一部分进行的更改。

当然,合并永远不会简单!在分支上的功能开发期间,可能偶尔会从主干合并回来,以使分支与主线代码保持同步。因此,分支的合并历史记录也将包含另一层合并历史记录。这些不同的层在日志对话框中使用缩进级别显示。

更改日志消息和作者

修订版属性与每个项目的 Subversion 属性完全不同。Revprops 是与存储库中的一个特定修订版号相关联的描述性项目,例如日志消息、提交日期和提交者姓名(作者)。

有时您可能想要更改您曾经输入的日志消息,可能是因为它存在拼写错误,或者您想改进消息或出于其他原因更改它。或者您想更改提交的作者,因为您忘记设置身份验证或...

Subversion 允许您随时更改修订版属性。但由于此类更改无法撤消(这些更改未版本化),因此此功能默认情况下处于禁用状态。要使其正常工作,您必须设置一个 pre-revprop-change 钩子。有关如何执行此操作的详细信息,请参阅 Subversion 手册中有关 钩子脚本 的章节。阅读 名为“服务器端钩子脚本”的部分 以找到有关在 Windows 机器上实现钩子的更多说明。

在您使用所需的钩子设置好服务器后,您可以使用日志对话框顶部窗格的上下文菜单更改任何修订的作者和日志消息(或任何其他修订属性)。您也可以使用中间窗格的上下文菜单编辑日志消息。

警告

由于 Subversion 的修订属性不是版本化的,对这种属性(例如,svn:log 提交消息属性)进行修改将永久覆盖该属性的先前值。

重要

由于 TortoiseSVN 会缓存所有日志信息,因此对作者和日志消息所做的编辑只会显示在您的本地安装中。使用 TortoiseSVN 的其他用户将继续看到缓存的(旧的)作者和日志消息,直到他们刷新日志缓存。请参阅名为“刷新视图”的部分

过滤日志消息

如果您希望将日志消息限制为仅显示您感兴趣的那些消息,而不是滚动浏览数百条消息列表,您可以使用日志对话框顶部的过滤器控件。开始日期和结束日期控件允许您将输出限制在已知日期范围内。搜索框允许您仅显示包含特定短语的消息。

单击搜索图标以选择您要搜索的信息,并选择正则表达式模式。通常您只需要一个简单的子字符串搜索,但如果您需要更灵活的搜索词,可以使用正则表达式。如果您将鼠标悬停在框上,工具提示将提供有关如何使用正则表达式函数或子字符串函数的提示。过滤器通过检查您的过滤器字符串是否与日志条目匹配来工作,然后仅显示匹配过滤器字符串的那些条目。

简单的子字符串搜索的工作方式类似于搜索引擎。要搜索的字符串用空格隔开,所有字符串都必须匹配。您可以使用前导 - 指定不找到特定子字符串(反转该术语的匹配),并且可以使用 ! 在表达式的开头反转整个表达式的匹配。您可以使用前导 + 指定应包含子字符串,即使之前已使用 - 排除。请注意,这里包含/排除的顺序很重要。您可以使用引号将必须包含空格的字符串括起来,如果您要搜索文字引号,则可以使用两个引号作为自转义序列。请注意,反斜杠字符 不是 用作转义字符,在简单的子字符串搜索中没有特殊意义。示例将使这更容易

Alice Bob -Eve
      

搜索包含 Alice 和 Bob 但不包含 Eve 的字符串

Alice -Bob +Eve
      

搜索包含 Alice 但不包含 Bob 的字符串,或包含 Eve 的字符串。

-Case +SpecialCase
      

搜索不包含 Case 的字符串,但仍然包含包含 SpecialCase 的字符串。

!Alice Bob
      

搜索不包含 Alice 和 Bob 的字符串

!-Alice -Bob
      

您还记得 De Morgan 定理吗?NOT(NOT Alice AND NOT Bob) 简化为 (Alice OR Bob)。

"Alice and Bob"
      

搜索文字表达式 Alice and Bob

""
      

搜索文本中的任何位置的双引号

"Alice says ""hi"" to Bob"
      

搜索文字表达式 Alice says "hi" to Bob.

描述正则表达式搜索的使用超出了本手册的范围,但您可以在 https://regexper.cn/ 找到在线文档和教程。

请注意,这些过滤器作用于已检索到的消息。它们不控制从存储库下载消息。

您也可以使用底部窗格中的 仅显示受影响的路径 复选框过滤路径名称。受影响的路径是指包含用于显示日志的路径的路径。如果您获取文件夹的日志,则意味着该文件夹或其下方的任何内容。对于文件,则仅表示该文件。通常,路径列表会显示受相同提交影响的任何其他路径,但以灰色显示。如果选中此框,则会隐藏这些路径。

有时,您的工作实践需要日志消息遵循特定格式,这意味着描述更改的文本在顶部窗格中显示的简要摘要中不可见。属性 tsvn:logsummary 可用于提取要显示在顶部窗格中的日志消息的一部分。阅读 名为“TortoiseSVN 项目属性”的部分,了解如何使用此属性。

从仓库浏览器中获取日志格式

由于格式化依赖于访问 Subversion 属性,因此您只有在使用签出的工作副本时才会看到结果。远程获取属性是一个缓慢的操作,因此您不会在仓库浏览器中看到此功能。

统计信息

统计 按钮会弹出一个框,显示有关日志对话框中显示的修订版的一些有趣信息。这将显示有多少作者参与了工作,他们提交了多少次提交,每周的进度等等。现在您可以一目了然地看到谁一直在努力工作,谁在懈怠 ;-)

统计页面

此页面为您提供所有您能想到的数字,特别是涵盖的时期和修订版数量,以及一些最小值/最大值/平均值。

按作者提交页面

图 4.25。按作者提交直方图

Commits-by-Author Histogram


此图表以简单直方图、堆叠直方图或饼图的形式向您显示哪些作者在项目中处于活跃状态。

图 4.26。按作者提交饼图

Commits-by-Author Pie Chart


当有几个主要作者和许多次要贡献者时,大量微小片段会使图表更难阅读。底部的滑块允许您设置一个阈值(作为总提交百分比),低于该阈值的任何活动都将分组到 其他 类别中。

按日期查看提交

图 4.27. 按日期查看提交图表

Commits-by-date Graph


此页面以图表形式展示了项目的活动情况,包括提交次数和作者。这可以帮助您了解项目何时进行开发以及哪些人在何时参与开发。

当有多个作者时,图表上将显示多条线。这里提供了两种视图:普通视图,其中每个作者的活动都相对于基线显示;堆叠视图,其中每个作者的活动都相对于其下方的线显示。后者可以避免线条交叉,使图表更易于阅读,但难以查看单个作者的输出。

默认情况下,分析区分大小写,因此用户 PeterEganPeteRegan 被视为不同的作者。但是,在许多情况下,用户名不区分大小写,并且有时输入不一致,因此您可能希望将 DavidMorgandavidmorgan 视为同一个人。使用 作者不区分大小写 复选框来控制如何处理这种情况。

请注意,统计数据涵盖与日志对话框相同的时期。如果只显示一个修订版,则统计数据不会提供太多信息。

离线模式

图 4.28. 离线模式对话框

Go Offline Dialog


如果服务器不可访问,并且您启用了日志缓存,则可以使用日志对话框和修订版图表在离线模式下工作。这将使用缓存中的数据,使您能够继续工作,尽管信息可能不是最新的,甚至可能不完整。

这里有三个选项:

现在离线

在离线模式下完成当前操作,但在下次请求日志数据时重试存储库。

永久离线

保持离线模式,直到明确请求存储库检查。请参阅 名为“刷新视图”的部分

取消

如果您不想使用可能过时的數據继续操作,只需取消即可。

选中 设为默认 复选框可以防止此对话框再次出现,并始终选择您下次选择的选项。您仍然可以从 TortoiseSVN设置 中更改(或删除)默认设置。

刷新视图

如果您想再次检查服务器是否有更新的日志消息,您可以简单地使用 F5 刷新视图。如果您使用的是日志缓存(默认情况下启用),这将检查存储库是否有更新的消息,并仅获取新的消息。如果日志缓存处于脱机模式,这也会尝试重新上线。

如果您使用的是日志缓存,并且您认为消息内容或作者可能已更改,您可以使用 Shift-F5Ctrl-F5 从服务器重新获取显示的消息并更新日志缓存。请注意,这只会影响当前显示的消息,不会使该存储库的整个缓存失效。

TortoiseSVN 主页