对于你做的每一次更改和提交,你都应该为该更改提供日志消息。这样你以后就可以找出你做了哪些更改以及原因,并且你有一个详细的开发过程日志。
修订日志对话框检索所有这些日志消息并显示给你。显示分为 3 个窗格。
顶部窗格显示已提交文件/文件夹更改的修订列表。此摘要包括日期和时间、提交修订的人员以及日志消息的开头。
以蓝色显示的行表示某些内容已复制到此开发行(可能来自分支)。
中间窗格显示所选修订的完整日志消息。
底部窗格显示作为所选修订的一部分而更改的所有文件和文件夹的列表。
但它的功能远不止于此 - 它提供了上下文菜单命令,您可以使用这些命令来获取有关项目历史记录的更多信息。
您可以从多个位置显示日志对话框
从 TortoiseSVN 上下文子菜单
从属性页
从更新完成后进度对话框。然后日志对话框仅显示自上次更新以来已更改的那些修订
从版本库浏览器
如果版本库不可用,您将看到要离线吗?对话框,在名为“离线模式”的章节中描述。
顶部窗格有一个操作列,其中包含概括该修订中所做操作的图标。有四个不同的图标,每个图标都显示在自己的列中。
如果修订修改了文件或目录,则在第一列中显示已修改图标。
如果修订添加了文件或目录,则在第二列中显示已添加图标。
如果修订删除了文件或目录,则在第三列中显示已删除图标。
如果修订替换了文件或目录,则在第四列中显示已替换图标。
如果修订移动或重命名了文件或目录,则在第四列中显示已移动图标。
如果修订通过移动/重命名替换了文件或目录,则在第四列中显示移动替换图标。
如果修订合并了文件或目录,则在第四列中显示已合并图标。
如果修订反向合并了文件或目录,则在第四列中显示反向合并图标。
日志对话框的顶部窗格具有上下文菜单,允许您访问更多信息。其中一些菜单项仅在为文件显示日志时出现,而另一些仅在为文件夹显示日志时出现。
将选定的修订与您的工作副本进行比较。默认的 Diff-Tool 是 TortoiseMerge,它随 TortoiseSVN 一起提供。如果日志对话框用于文件夹,这将向您显示更改文件的列表,并允许您查看对每个文件所做的更改。
Blame 所选修订和工作 BASE 中的文件,并使用可视化差异工具比较 blame 报告。阅读名为“Blame 差异”的章节以获取更多详细信息。(仅限文件)
以 Unified-Diff 文件(GNU patch 格式)查看在所选修订中所做的更改。这仅显示与几行上下文的差异。它比可视化文件比较更难阅读,但会将所有文件更改一起显示为紧凑的格式。
如果您在单击菜单项时按住 Shift 键,则首先会弹出一个对话框,您可以在其中设置统一差异的选项。这些选项包括忽略行尾和空格中的更改的能力。
将选定的修订与上一个修订进行比较。这与与您的工作副本进行比较的方式类似。对于文件夹,此选项将首先显示更改的文件对话框,允许您选择要比较的文件。
显示更改的文件对话框,允许您选择文件。Blame 所选修订和上一个修订,并使用可视化差异工具比较结果。(仅限文件夹)
将所选修订版保存到文件,以便您拥有该文件的旧版本。(仅限文件)
打开所选文件,可以使用该文件类型的默认查看器,也可以使用您选择的程序。(仅限文件)
Blame 文件直到选定的修订版。(仅限文件)
打开版本库浏览器以检查版本库中选定的文件或文件夹,就像它在选定的修订版中一样。
从选定的修订版创建分支或标签。例如,如果您忘记创建标签并且已经提交了一些不应该进入该版本的更改,这将非常有用。
将您的工作副本更新到选定的修订版。如果您希望您的工作副本反映过去的时间,或者如果版本库中有进一步的提交,并且您希望一次更新您的工作副本一步,这将非常有用。最好更新工作副本中的整个目录,而不仅仅是一个文件,否则您的工作副本可能会不一致。
如果您想永久撤消之前的更改,请改用恢复到此修订版。
恢复到较早的修订版。如果您进行了多次更改,然后决定您真的想回到修订版 N 中的状态,这就是您需要的命令。更改在您的工作副本中撤消,因此在您提交更改之前,此操作不影响版本库。请注意,这将撤消在选定的修订版之后进行的所有更改,并将文件/文件夹替换为较早的版本。
如果您的工作副本处于未修改状态,则在您执行此操作后,您的工作副本将显示为已修改。如果您已经有本地更改,此命令会将撤消更改合并到您的工作副本中。
内部发生的情况是 Subversion 执行反向合并,合并选定修订版之后进行的所有更改,从而撤消先前提交的效果。
如果在执行此操作后,您决定要撤消撤消,并将您的工作副本恢复到之前的未修改状态,您应该从 Windows 资源管理器中使用 → ,这将丢弃由此反向合并操作所做的本地修改。
如果您只是想查看文件或文件夹在较早的修订版中的样子,请改用更新到修订版或另存为修订版...。
撤消在选定修订版中进行的更改。更改在您的工作副本中撤消,因此此操作根本不影响版本库!请注意,这将仅撤消在该修订版中进行的更改;它不会将您的工作副本替换为较早修订版中的整个文件。当自那时以来进行了其他无关的更改时,这对于撤消较早的更改非常有用。
如果您的工作副本处于未修改状态,则在您执行此操作后,您的工作副本将显示为已修改。如果您已经有本地更改,此命令会将撤消更改合并到您的工作副本中。
内部发生的情况是 Subversion 执行该修订版的反向合并,从而撤消其先前提交的效果。
您可以如上文恢复到此修订版中所述撤消撤消。
将选定的修订版合并到不同的工作副本中。文件夹选择对话框允许您选择要合并到的工作副本,但之后没有确认对话框,也没有机会尝试测试合并。最好合并到未修改的工作副本中,这样如果它不起作用,您可以还原更改!如果您想将选定的修订版从一个分支合并到另一个分支,这是一个有用的功能。
在选定的修订版中创建所选文件夹的全新检出。这将弹出一个对话框,供您确认 URL 和修订版,并选择检出的位置。
在选定的修订版中导出选定的文件/文件夹。这将弹出一个对话框,供您确认 URL 和修订版,并选择导出的位置。
编辑附加到先前提交的日志消息或作者。阅读名为“更改日志消息和作者”的章节,以了解其工作原理。
查看和编辑任何修订版属性,而不仅仅是日志消息和作者。请参阅名为“更改日志消息和作者”的章节。
将所选修订版的日志详细信息复制到剪贴板。这将复制每个修订版的修订版号、作者、日期、日志消息和更改项目列表。
搜索您输入的文本的日志消息。这将搜索您输入的日志消息以及 Subversion 创建的操作摘要(显示在底部窗格中)。搜索不区分大小写。
仅当安装了 SmartBear 代码协作工具时,才会显示此菜单。首次调用时,会显示一个对话框,提示用户输入代码协作和 SVN 的用户凭据。存储设置后,再次调用菜单时不再显示设置对话框,除非用户在执行菜单项时按住 Ctrl。配置和选定的修订版用于调用代码协作图形用户界面客户端,该客户端使用选定的修订版创建新的审阅。
如果您一次选择两个修订版(使用常用的 Ctrl 修饰符),上下文菜单会更改,并且为您提供较少的选项
使用可视化差异工具比较两个选定的修订版。默认的 Diff-Tool 是 TortoiseMerge,它随 TortoiseSVN 一起提供。
如果您为文件夹选择此选项,则会弹出一个进一步的对话框,列出更改的文件并为您提供进一步的差异选项。在名为“比较文件夹”的章节中阅读有关比较修订版对话框的更多信息。
Blame 两个修订版,并使用可视化差异工具比较 blame 报告。阅读名为“Blame 差异”的章节以获取更多详细信息。
以 Unified-Diff 文件查看两个选定修订版之间的差异。这适用于文件和文件夹。
如上所述,将日志消息复制到剪贴板。
如上所述,搜索日志消息。
如果您选择两个或多个修订版(使用常用的 Ctrl 或 Shift 修饰符),上下文菜单将包含一个条目,用于还原在选定修订版中进行的所有更改。这是一次性回滚一组修订版的最简单方法。
您还可以选择将选定的修订版合并到另一个工作副本,如上所述。
如果所有选定的修订版都具有相同的作者,您可以一次性编辑所有这些修订版的作者。
日志对话框的底部窗格也具有上下文菜单,允许您
显示在所选修订版中为所选文件所做的更改。
Blame 所选修订版和上一个修订版以获取所选文件,并使用可视化差异工具比较 blame 报告。阅读名为“Blame 差异”的章节以获取更多详细信息。
以统一差异格式显示文件更改。此上下文菜单仅适用于显示为已修改的文件。
打开所选文件,可以使用该文件类型的默认查看器,也可以使用您选择的程序。
打开 Blame 对话框,允许您 blame 直到选定的修订版。
还原在该修订版中对所选文件所做的更改。
查看所选项目的 Subversion 属性。
显示所选单个文件的修订日志。
显示所选单个文件的修订日志,包括合并的更改。在名为“合并跟踪功能”的章节中了解更多信息。
将所选修订版保存到文件,以便您拥有该文件的旧版本。
将此修订版中的所选项目导出到文件夹,保留文件层次结构。
当在日志对话框的底部窗格中选择多个文件时,上下文菜单将更改为以下内容
将所选修订版保存到文件,以便您拥有该文件的旧版本。
显示在所选修订版中为所选文件所做的更改。请注意,显示更改功能被多次调用,这可能会弹出所选差异工具的多个副本,或者只是在您的差异工具中添加一个新的比较选项卡。如果您选择了超过 15 个文件,系统将提示您确认操作。
这将使用为扩展名注册的应用程序打开与您选择的文件对应的本地工作副本文件。[行为是您在 Windows 资源管理器中双击工作副本文件时会得到的行为]。根据您的文件扩展名与应用程序的关联方式以及应用程序的功能,这可能是一个缓慢的操作。在最坏的情况下,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 使用修订版号来表示 2 个不同的含义。修订版通常表示版本库在某个时间点的状态,但它也可以用于表示创建该修订版的更改集,例如“在 r1234 中完成”表示在 r1234 中提交的更改实现了功能 X。为了更清楚地说明正在使用哪个意义,我们使用两个不同的术语。
如果您选择两个修订版 N 和 M,上下文菜单将提供显示这两个修订版之间的差异。在 Subversion 术语中,这是 diff -r M:N
。
如果您选择单个修订版 N,上下文菜单将提供显示在该修订版中所做的更改。在 Subversion 术语中,这是 diff -r N-1:N
或 diff -c N
。
底部窗格显示在所有选定修订版中更改的文件,因此上下文菜单始终提供显示更改。
日志对话框并非总是显示曾经进行的所有更改,原因有很多
对于大型版本库,可能存在数百甚至数千个更改,并且获取所有更改可能需要很长时间。通常您只对最近的更改感兴趣。默认情况下,获取的日志消息数量限制为 100,但您可以在名为“TortoiseSVN 对话框设置 1”的章节)中更改此值,
→ (当选中在复制/重命名时停止框时,“显示日志”将在选定的文件或文件夹从版本库中的其他位置复制时停止。当查看分支(或标签)时,这可能很有用,因为它会在该分支的根目录处停止,并快速指示仅在该分支中所做的更改。
通常,您希望保持未选中此选项。TortoiseSVN 会记住复选框的状态,因此它会尊重您的偏好。
当从“合并”对话框中调用“显示日志”对话框时,该框始终默认选中。这是因为合并最常查看分支上的更改,并且在这种情况下,返回到分支的根目录之外没有意义。
请注意,Subversion 当前将重命名实现为复制/删除对,因此如果选中此选项,重命名文件或文件夹也会导致日志显示停止。
如果您想查看更多日志消息,请单击
以检索下 100 条日志消息。您可以根据需要重复此操作多次。在此按钮旁边,有一个多功能按钮,它会记住您上次使用的选项。单击箭头以查看提供的其他选项。
如果您想查看特定范围的修订版,请使用
。然后,对话框将提示您输入开始和结束修订版。如果您想查看从 HEAD 一直到修订版 1 的所有日志消息,请使用 。
为了在日志对话框打开时有其他提交的情况下刷新最新修订版,请按 F5 键。
要刷新日志缓存,请按 Ctrl-F5 键。
由于日志对话框显示来自 HEAD 的日志,而不是来自当前工作副本修订版的日志,因此经常会发生日志消息显示的内容尚未在您的工作副本中更新的情况。为了帮助更清楚地说明这一点,与您在工作副本中拥有的修订版对应的提交消息以粗体显示。
当您显示文件夹的日志时,突出显示的修订版是在该文件夹中任何位置找到的最高修订版,这需要爬取工作副本。爬取发生在单独的线程中,以便不延迟显示日志,但结果是文件夹的突出显示可能不会立即出现。
Subversion 1.5 及更高版本使用属性保留合并记录。这使我们能够获得更详细的合并更改历史记录。例如,如果您在分支上开发新功能,然后将该分支合并回主干,则功能开发将在主干日志上显示为一次合并提交,即使在分支开发期间可能已提交了 1000 次。
如果您想查看作为该提交一部分合并的修订版的详细信息,请使用包括合并的修订版复选框。这将再次获取日志消息,但也会交错显示来自合并修订版的日志消息。合并的修订版以灰色显示,因为它们表示在树的不同部分进行的更改。
当然,合并从来都不是简单的!在分支上的功能开发期间,可能会偶尔从主干合并回分支,以使分支与主线代码保持同步。因此,分支的合并历史记录还将包括另一层合并历史记录。这些不同的层在日志对话框中使用缩进级别显示。
修订版属性与每个项目的 Subversion 属性完全不同。Revprop 是描述性项目,它们与版本库中的一个特定修订版号相关联,例如日志消息、提交日期和提交者姓名(作者)。
有时您可能想要更改您曾经输入的日志消息,可能是因为其中存在拼写错误,或者您想要改进消息或出于其他原因更改它。或者您想更改提交的作者,因为您忘记设置身份验证或...
Subversion 允许您随时更改修订版属性。但是由于此类更改无法撤消(这些更改未版本化),因此默认情况下禁用此功能。为了使此功能起作用,您必须设置 pre-revprop-change 钩子。请参阅 Subversion Book 中关于 Hook 脚本 的章节,以获取有关如何执行此操作的详细信息。阅读名为“服务器端钩子脚本”的章节,以查找有关在 Windows 机器上实现钩子的一些其他注意事项。
一旦您使用所需的钩子设置了服务器,您就可以使用日志对话框顶部窗格中的上下文菜单来更改任何修订版的作者和日志消息(或任何其他 revprop)。您还可以使用中间窗格的上下文菜单来编辑日志消息。
由于 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
你还记得德摩根定理吗?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”。
描述正则表达式搜索的使用超出了本手册的范围,但您可以在 http://regexper.cn/ 找到在线文档和教程。
请注意,这些过滤器作用于已检索的消息。它们不控制从版本库下载消息。
您还可以使用仅显示受影响的路径复选框来过滤底部窗格中的路径名。受影响的路径是那些包含用于显示日志的路径的路径。如果您获取文件夹的日志,则表示该文件夹或其下方的任何内容。对于文件,它仅表示该文件。通常,路径列表显示受同一提交影响的任何其他路径,但以灰色显示。如果选中该框,则这些路径将被隐藏。
有时,您的工作实践将要求日志消息遵循特定格式,这意味着描述更改的文本在顶部窗格中显示的缩写摘要中不可见。属性 tsvn:logsummary
可用于提取日志消息的一部分,以显示在顶部窗格中。阅读名为“TortoiseSVN 项目属性”的章节,以了解如何使用此属性。
由于格式取决于访问 Subversion 属性,因此您仅在使用检出的工作副本时才会看到结果。远程获取属性是一个缓慢的操作,因此您不会在版本库浏览器中看到此功能。
按钮弹出一个框,其中显示有关日志对话框中显示的修订版的一些有趣信息。这显示有多少作者在工作,他们进行了多少次提交,按周的进度等等。现在您可以一目了然地看到谁工作最努力,谁在偷懒 ;-)
此图表以简单的直方图、堆积直方图或饼图显示哪些作者在项目中处于活跃状态。
在少数主要作者和许多次要贡献者的情况下,微小段的数量会使图表更难阅读。底部的滑块允许您设置阈值(占总提交的百分比),低于该阈值的任何活动都将分组到其他类别中。
此页面为您提供项目活动的图形表示,以提交次数和作者为单位。这给出了一些关于项目何时被处理以及谁在哪个时间工作的想法。
当有多个作者时,您将在图表上获得许多行。此处提供两种视图:正常,其中每个作者的活动相对于基线,以及堆积,其中每个作者的活动相对于下方的线。后一个选项避免了线条交叉,这可以使图表更易于阅读,但不太容易看到一位作者的输出。
默认情况下,分析区分大小写,因此用户 PeterEgan
和 PeteRegan
被视为不同的作者。但是,在许多情况下,用户名不区分大小写,有时输入不一致,因此您可能希望将 DavidMorgan
和 davidmorgan
视为同一个人。使用作者不区分大小写复选框来控制如何处理此问题。
请注意,统计信息涵盖的期间与日志对话框相同。如果日志对话框仅显示一个修订版,那么统计信息不会告诉您太多信息。
如果服务器无法访问,且您启用了日志缓存,您可以在离线模式下使用日志对话框和版本修订图。这会使用缓存中的数据,使您可以继续工作,但信息可能不是最新的,甚至不完整。
这里有三个选项
在离线模式下完成当前操作,但在下次请求日志数据时重试访问版本库。
保持离线模式,直到明确请求版本库检查。请参阅“刷新视图”章节。
如果您不想使用可能过时的数据继续操作,请直接取消。
勾选设为默认复选框可以防止此对话框再次出现,并始终选择您下次选择的选项。您仍然可以在之后从 → 中更改(或删除)默认设置。