获得状态信息

当你在你的工作副本上工作时,你时常需要知道哪些文件你已经修改/增加/删除或改名了,或者甚至是哪个文件已经被其他人修改并提交了。

图标重载

图 4.12. 显示重载图标的资源管理器

显示重载图标的资源管理器

现在你已经从 Subversion 版本库中检出了一份工作副本,你可以在资源管理器中看一下这些文件的图标有什么变化。这也正是 TortoiseSVN 这么流行的原因之一。TortoiseSVN 加入了被称为重载图标的功能重载了原始的文件图标。根据文件的 Subversion 状态的不同,重载的图标也不同。

获得状态信息 - 图2

一个新检出的工作副本使用绿色的对勾做重载。表示 Subversion 状态正常.

获得状态信息 - 图3

在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次更新工作副本后被修改过,需要被提交。

获得状态信息 - 图4

如果在更新的过程中出现了冲突,图标会变成黄色感叹号。

获得状态信息 - 图5

如果你给一个文件设置了svn:needs-lock属性,Subversion 会让此文件只读,直到你获得文件锁。具有这个重载图标的文件来表示你必须在编辑之前先得到锁。

获得状态信息 - 图6

如果你拥有了一个文件的锁,并且 Subversion 状态是正常,这个重载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对该文件的修改。

获得状态信息 - 图7

这个图标表示当前文件夹下的某些文件或文件夹已经被调度从版本控制中删除,或是该文件夹下某个受版本控制的文件丢失了。

获得状态信息 - 图8

加号告诉你有一个文件或目录已经被调度加入版本控制。

获得状态信息 - 图9

横条告诉你有一个文件或目录被版本控制系统所忽略。这个图标重载是可选的。

获得状态信息 - 图10

这个图标说明文件和目录未被版本控制,但是也没有被忽略。这个图标重载是可选的。

事实上,你会发现并不是所有的图标被你的系统使用。这是由于 Windows 允许的重载图标数量很有限,如果你同时使用旧版的 TortoiseCVS,就没有足够的重载可用。TortoiseSVN 试图成为一个“良好市民(TM)”,限制自身使用重载图标,为别的程序留下机会。

现在有很多 Tortoise 客户端工具(TortoiseCVS, TortoiseHG, …)所以图标限制成为一个实实在在的问题。为了解决这个问题,TortoiseSVN 项目引入了一种通用共享图标集,以动态链接库的形式加载。它可以被所有的 Tortoise 客户端工具使用。联系你的客户端程序提供者以确认是否支持这一功能(微笑)。

要获得图表重载与 Subversion 状态的对应关系,或者其它技术细节,请阅读“图标重载”一节

详细状态

图 4.13. 资源管理器属性页,Subversion 页面

资源管理器属性页,Subversion 页面

有时你可能想得到关于一个文件/目录的更多的细节信息而不仅是一个重载的标志。 你能得到Subversion的属性对话框中浏览到的所有信息。只需选择指定文件或目录,然后在文件菜单中选择Windows 菜单 → 属性(注意: 这是资源管理器提供的标准属性菜单,而不是TortoiseSVN 子菜单的其中之一)。在TortoiseSVN 属性对话框中已经为在Subversion控制下的文件/目录增加新的属性页。在这里你能看到所有的关于选择文件/目录的相关信息。

本地与远程状态

图 4.14. 检查修改

检查修改

通常知道你修改了哪些文件以及哪些文件已经由另人修改并提交了是很有用的。这就是命令 TortoiseSVN → 检查修改 的用武之地了。这个对话框显示了所有你的工作副本中进行了任何形式的修改的的文件,也包括了当前存在的未受控的文件。

如果单击 检查版本库 就会同时查看版本库中的更改。通过这种方法可以在更新之前检查是否可能发生冲突。你也可以从版本库中只更新选中的文件而无需更新整个文件夹。在默认情况下,检查版本库 按钮只获取位于工作副本深度内的条目的远程状态。如果要查看版本库中所有的文件和文件夹,即使有些文件并没有被检出,那么就应该在单击 检查版本库 按钮时按住 Shift 键。

对话框使用颜色代码来高亮显示状态。

  • 蓝色

本地被修改过的项

  • 紫色

增加的项。那些被加入的项在文本状态列中有个+号表示,工具提示(tooltip)显示了该项是从哪里复制来的。

  • 深红

删除的或是丢失的项。

  • 绿色

在本地和版本库中都有被修改过的项。改动将在更新的时候被合并。这种情况很可能在更新的时候产生冲突。

  • 亮红

在本地被修改过但在版本库中已经被删除的项,或者在版本库中被修改但在本地被删除的项。这种情况必将在更新时产生冲突。

  • 黑色

未修改和未受控的项。

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

图标也被用来指示其他状态。屏幕截图显示了所有可能必要的图标。

获得状态信息 - 图13

图标显示了如下状态:

  • 检出深度空白,仅表示项目本身。

  • 检测深度文件,仅表示项本身和所有子文件不包括子文件夹。

  • 深度检出立刻,意味着只有项目本身,所有文件以及文件夹的子文件,但不包括子文件的子文件。

  • 嵌套项,即工作副本内的工作副本。

  • 外部项目,即通过svn:externals属性添加的所有项目。

  • 提交后,项目会被恢复。参考“仅提交文件的部分”一节

  • 有修改属性的项目,但只是svn:mergeinfo属性。如果其他属性被修改了,覆盖将不被使用。

那些被切换到不同版本库路径的项目也用(s)标记来表示。当在分支上工作的时候你可能切换到某处,然后忘记切换回主干。这是你的警告信号!右键菜单允许你把它们再次切换回普通路径

在对话框的上下文菜单中你可以显示改变的差异。使用 上下文菜单 → 与基础版本比较检查所作的本地修改。使用上下文菜单 → 使用标准差异格式显示差异检查版本库中别人作的修改。

你也可以还原单个文件的修改。如果不小心删除了某个文件,就会显示为 缺少 而且可以使用 SVN 还原 来恢复它。

可以使用右键菜单 → 删除将未版本控制的或忽略的文件丢到垃圾箱。如果你想彻底删除(不使用垃圾箱),在点击删除时,请按着Shift键。

如果你想要仔细检查一个文件,你可以把它拖到其他的应用中,例如文本编辑器或者IDE,或者你可以把它拖到资源管理器中的一个文件夹来保存副本。

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

如果你同时做几个不相关的任务,也可以在修改列表中分组文件。阅读“修改列表”一节

在对话框的底部可以看到在你的工作副本中所使用的版本库版本号范围的总结。它们是 提交 的版本号,不是 更新 的版本号; 它们表示这些文件上一次提交的版本号范围,不是它们被更新的版本号。注意,这个版本号范围仅仅对应于显示的条目,而不是整个工作副本。如果要查看整个工作副本的信息,必须要选中 未修改的 复选框。

提示

如果你需要工作目录的全面视图,也就是所有文件和文件夹都同时显示,以便方便的使用检查修改。只要选择现实未修改文件检查栏,显示工作目录中的所有文件即可。

修复外部改名

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

修复外部复制

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

查看差别

通常你想要深入文件中了解你修改了什么。要达到这个目的,你可以选中这个文件,然后在TortoiseSVN的右键菜单中选择比较。这个操作会启动一个外部的差别检查程序,由它来比较当前文件与上一次检出或更新后的原始的副本(基础版本)。

提示

即使你不是在一个工作副本中工作或者你有多个版本的文件,你都可以按以下方法来进行比较:

选择你要比较的两个文件(比如,你可以使用Ctrl 键加鼠标),然后从TortoiseSVN的右键菜单中选择比较。最后一个被鼠标点中的文件(具有焦点的文件,比如有虚线框的文件具有焦点),将作为被比较文件的后一个。