将你的修改提交到版本库

将你对工作副本的修改发送给版本库,称为提交修改。但在你提交之前要确保你的工作副本是最新的。你可以直接使用TortoiseSVN → 更新,或者,你可以先使用TortoiseSVN → 检查修改看看哪些文件在本地或是服务器上已经有了改动。

提交对话框

如果你的工作副本是最新的,并且没有冲突,你就已经为提交做好准备了,选择你要提交的文件和/或文件夹,然后TortoiseSVN → 提交….

图 4.8. 提交对话框

提交对话框

提交对话框将显示每个被改动过的文件,包括新增的、删除的和未受控的文件。如果你不想改动被提交,只要将该文件的复选框的勾去掉就可以了。如果你要加入未受控的文件,只要勾选该文件把它加入提交列表就可以了。

快速选中或者取消选中所有版本控制的或修改过的文件类型,单击列表上方显示项目的项目链接。

关于颜色和基于项目状态覆盖相关的信息,请参考“本地与远程状态”一节

那些被切换(switched)到不同版本库路径的项也用(s)标记来表示。当工作在分支上的时候你可能切换到某处,然后忘记切换回主干。这是你的警告信号!

提交文件还是文件夹?

当你提交文件时,提交对话框只显示你所提中的文件。当你提交文件夹中,提交对话框将自动选择有改动的文件。如果你忘记了你建立的一个新文件,提交文件夹将使你可以找到它。提交一个文件夹并不意味着每个文件都被标识为修改过的,它仅仅是通过帮你多做些事从而让你的生活更滋润一点。

在提交对话框中有很多未受控的文件

如果你认为提交对话框显示了太多的未受版本控制的文件(如编译器产生的文件或是编辑器的备份文件),有几种方法可以处理这种情况。你可以:

  • 将文件(或是通配符扩展)加入到设置页的排除列表中。这对每个工作副本都起作用。

  • 使用TortoiseSVN → 加入忽略列表,将文件加入svn:ignore列表。 这只对你设置了svn:ignore属性的路径有效。使用SVN属性对话框,你可以改变一个目录的svn:ignore属性。

  • 使用TortoiseSVN → 添加到忽视列表(全递归)来增加文件到svn:global-ignores列表中去。这会影响你设置svn:global-ignores属性的目录和所有的子文件夹。

参考 “忽略文件和目录”一节 获得更多的信息。

在提交对话框中双击任何修改过的文件,将运行外部 diff 工具显示你做的改动。上下文菜单将给你更多的选项,请看屏幕截图。你可以从这里将文件拖动到另一个应用程序中,如文本编辑器或 IDE。

可以通过单击条目左侧的复选框来选中或不选该条目。对于目录,可以按下 Shift 键再 选择 就可以递归该动作。

在底部面板中显示的列是可定制的。如果你右击任何一列的头部,你就会看到一个上下文菜单,允许你选择哪一列要显示。还可以在鼠标移动到列边界时通过拖动手把来改变列的宽度。这些定制的内容都会被保留下来,下一次你会见到相同的列。

缺省情况下,当你成功提交修改后,你在这些文件上持有的锁会被自动释放。如果你需要保留锁,请确认选中检查框保留锁。此检查框的缺省状态从 Subversion 配置文件的 no_unlock 选项获取。参考 “常规设置”一节

正在提交到Tag时警告

通常,提交是提交到主干或者分支,而不是标签。毕竟,标签应该固定而且不应该更改。

如果提交试图标识URL,TortoiseSVN 会先显示确认对话框来确保这是否真的需要被完成。因为绝大多数时候,这种提交是意外出现的。

然而,只有在版本库布局是推荐布局的情况下,这个检出才有效。这意味着它使用了名字主干分支标签来标记三个主要区域。以防设置不同,可以在设置对话框“版本图设置”一节

拖放

你可以将文件从别的地方拖动到提交对话框,只要工作副本是由同一版本库中检出就可以了。比如,你有一个很大的工作副本,要开好几个资源管理器窗口来查看层次中不同的文件夹。如果你要避免从顶级文件夹提交(冗长而缓慢的文件夹改动检查),你可以打开一个文件夹的提交对话框,然后将别的窗口中的项拖进去,可样就可以一次提交它们了。

你可以将未版本控制的文件拖到工作副本提交对话框中,它们就会被自动增加。

从提交对话框底部的列表中将文件拖拽到日志消息编辑框中,就能以文本格式将文件的路径插入编辑框中。当你想将本次提交相关的文件路径插入日志消息中时该功能非常有用。

修复外部改名

有时候文件不是用 Subversion 改名,于是它们在文件列表中作为丢失和未版本控制的文件出现。为了避免丢失历史,你需要通知Subversion。简单的选择老名称(丢失)和新名称(未版本控制),然后使用右键菜单 → 修复移动来指明这两个文件是改名关系。

修复外部复制

如果复制了一个文件,但不是通过 Subversion 的命令来做的,你可以修复此次复制来确保新文件不会丢失历史。只要简单的选择旧文件(正常或已修改)和新文件(无版本控制),然后使用 右键菜单 → 修复复制来修复两个文件的复制关系。

修改列表

提交对话框支持 Subversion 的更改列表功能来分组相关的文件。关于这个功能,请查看“修改列表”一节

仅提交文件的部分

有时你只想提交一个文件部分修改的部分。这种情况通常在你做某些事情,但是一个紧急的修复需要被提交,而那个修复正好是你正在工作中的同一个文件。

右键文件并使用上下文菜单 → 提交后恢复。这回创建文件的一个副本。然后你可以编辑这个文件,例如在文本编辑器中,撤销你不想要提交的所有修改。在保存这些修改后,你可以提交文件

使用 TortoiseMerge

如果你使用TortoiseMerge来编辑文件,你可以编辑你修改过的变更,也可以标记你想要添加的变更。右键修改块,然后使用上下文菜单 → 标记这个变更来添加变更。最后右键并使用上下文菜单 → 仅保留标记的变更它就会更改正确的视图以包括你之前标记的变更并撤销你未标记的变更。

提交完成后,文件副本会自动恢复,你的文件将保留未提交的所有修改

从提交列表中排除项目

有时,你经常更改一些版本控制的文件但你却不打算提交它们。这有可能说明你的构建过程中存在瑕疵 - 那些文件为什么是版本控制的?应该使用模版文件吗?但可能这是无法避免的。一个经典的原因是当你每次构建的时候,集成开发环境(IDE)更改了项目文件的时间戳。项目文件是版本控制的,因为它包含全部的构建设置。但是,仅仅因为时间戳更改了的情况下,你并不需要提交它。

为了解决这样一个棘手的问题,我们准备了一个名叫 ignore-on-commit 的更改列表。任何一个被添加到这个列表的文件在提交对话框中将不会自动选中。你仍然可以提交此文件的更改,不过你需要在提交对话框中手动选中它。

提交日志信息

确保输入描述你所提交的修改内容的日志信息。这可以帮你回顾做了什么,什么时候做的。信息的内容可长可短,许多项目规定了要包含的内容、使用的语言甚至是严格的格式。

你可以使用与电子邮件相似的约定,简单格式化日志消息。如果对文本采用这些样式,使用*文本*表示粗体,_文本_表示下划线,^文本^表示斜体。

图 4.9. 提交对话框的拼写检查器

提交对话框的拼写检查器

TortoiseSVN包含了一个拼写检查器帮助你正确地书写日志信息。对任何错误拼写的词都高亮显示。使用右键菜单可以获得修改建议。当然它不会知道所有的技术术语,所以有时一些拼写正确的词会被当作错误。但不用担心,你可以使用右键菜单将它们加入你的个人字典中。

日志消息窗口同时也含有文件名和函数自动完成的功能。它使用正则表达式从本次提交的(文本)文件中抽取类和函数的名称,以及被提交文件的文件名。如果你输入的单词与列表中的内容匹配(至少键入 3 个字符,或者按 Crtl+空格),就会显示一个下拉列表让你选择完整的名字。TortoiseSVN 支持的正则表达式位于 TortoiseSVN 安装文件夹下的 bin 文件夹中。你可以自定义匹配规则然后将其保存在文件 %APPDATA%\TortoiseSVN\autolist.txt 中。当然,在升级新版本的 TortoiseSVN 时你个人的自动匹配规则列表不会被覆盖。如果你不熟悉正则表达式,可以看一下介绍:http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F,以及在线文档和教程: http://www.regular-expressions.info/

写出正确的匹配规则有点棘手,所以为了帮你写出合适的表达式,我们提供了一个对话框,你可以输入表达式,然后输入文件名来做个测试。要启动该对话框,在命令提示符中输入这个命名: TortoiseProc.exe /command:autotexttest

日志信息窗口里也同样包含了一个提交信息的片段工具。一旦你输入某个片段的快捷指令后他们就会出现在自动完成提示框内。你可以从提示框内选择一个片段这样整个片段的文字就会插入进来。TortoiseSVN自带的片段都被保存在TortoiseSVN安装目录下的bin文件夹内。你也可以在%APPDATA%\TortoiseSVN\snippet.txt里存储你自己的片段。#是注释符,换行符可以用反斜杠标记\n\r。你还可以通过\来输入反斜杠。

你可以重复使用先前键入的日志信息。只需要点击最近信息即可查看你为此工作副本键入的最近几条信息。

你可以从 TortoiseSVN 的设置窗口的已保存数据页中清除所有的保存消息,或者你可以在最近信息对话框中使用 Delete 键单独删除某条消息。

如果想要在日志信息中加入选中的文件路径,可以在编辑框中使用 右键菜单 → 粘贴文件名列表。

另一个向日志消息中插入路径的方法是: 从文件列表中将文件拖拽到文本框中。

指定文件夹属性

有几个特殊的文件夹属性可用于帮助我们得到更多的对提交日志信息的格式以及拼写检查模块的控制。参考“项目设置”一节以了解详情。

与缺陷跟踪工具集成

如果你激活了一个bug跟踪系统,你可以在Bug-ID / Issue-Nr:文本框中设置一个或多个问题。多个问题应该用逗号分割。或者,如果你使用基于正则表达式的bug跟踪支持,只要将你的问题引用作为日志信息的一部分加入就可以了。详情请见“与 BUG 跟踪系统/问题跟踪集成”一节

提交进程

在按下OK之后,会出现一个对话框显示提交的进度。

图 4.10. 显示提交进度的进度对话框

显示提交进度的进度对话框

进度对话框使用颜色代码来高亮显示不同的提交行为。

  • 蓝色

提交一个修改。

  • 紫色

提交一个新增项。

  • 深红

提交一个删除或是替换。

  • 黑色

所有其他项。

这是默认的配色方案,但你可以通过设置对话框来定制这些颜色。参考“TortoiseSVN 颜色设置”一节