[No000094]SVN学习笔记4-版本库概念与部分日常操作

基本概念

版本库

Subversion 使用集中的数据库,它包含了所有的版本控制文件及其完整历史。这个数据库就是版本库。版本库通常位于运行 Subversion 服务器的文件服务器上,向 Subversion 客户端(例如TortoiseSVN)提供需要的数据。如果只备份一个东西,请备份版本库,因为它是你数据的主副本。

Subversion 是一种集中的分享信息的系统,它的核心是版本库,储存所有的数据,版本库按照文件树形式储存数据-包括文件和目录,任意数量的客户端可以连接到版本库,读写这些文件。通过写数据,别人可以看到这些信息;通过读数据,可以看到别人的修改。

一个典型的客户/服务器系统

实际上,版本库是另一种文件服务器,而不是你常见的那一种。最特别的是 Subversion 会记录每一次的更改,不仅针对文件也包括目录本身,包括增加、删除和重新组织文件和目录。

工作副本

这是实际工作的地方。每一个开发者在自己的电脑上都有属于自己的工作副本,有时可以将其理解为沙箱。你可以将最新的版本从版本库上取下来,在本地的副本上工作而不影响其他人,如果对更改满意就可以将其提交到版本库中。

Subversion 工作副本不包含项目的历史,但是它保存了你修改前的本件的副本,就像这些文件在版本库中的状态一样。这意味着你可以轻而易举的准确检查出都做了哪些改动。

添加更多的文件

右键单击文件夹然后选择 TortoiseSVN 增加。加入对话框显示了所有未被版本控制的文件,你可以选择哪些文件要被添加。另一个增加文件的方法是右键单击文件自身然后选择 TortoiseSVN 加入。

现在当你提交文件夹时,新文件会显示为增加,原有的文件显示为修改。注意你可以双击修改的文件查看做了哪些改动。

文件共享的问题

锁定-修改-解锁 方案

在这种系统中,在同一时间版本库只允许一个用户修改一个文件。

锁定-修改-解锁模型有一点问题就是限制太多,经常会成为用户的障碍:

锁定可能导致管理问题。有时候 Harry 会锁住文件然后忘了此事,这就是说 Sally 一直等待解锁来编辑这些文件,她在这里僵住了。然后 Harry 去旅行了,现在 Sally 只好去找管理员放开锁,这种情况会导致不必要的耽搁和时间浪费。

锁定可能导致不必要的线性化开发。如果 Harry 编辑一个文件的开始,Sally 想编辑同一个文件的结尾,这种修改不会冲突,设想修改可以正确的合并到一起,他们可以轻松的并行工作而没有太多的坏处,没有必要让他们轮流工作。

锁定可能导致错误的安全状态。假设 Harry 锁定和编辑一个文件 A,同时 Sally 锁定并编辑文件 B,如果 A B 互相依赖,这种变化是必须同时作的,这样 A B 不能正确的工作了,锁定机制对防止此类问题将无能为力—从而产生了一种处于安全状态的假相。很容易想象 Harry Sally 都以为自己锁住了文件,而且从一个安全,孤立的情况开始工作,因而没有尽早发现他们不匹配的修改。

复制-修改-合并 方案

复制-修改-合并方案

但是如果 Sally Harry 的修改重叠了该怎么办?这种情况叫做冲突,这通常不是个大问题,当Harry 告诉他的客户端去合并版本库的最新修改到自己的工作副本时,他的文件 A 就会处于冲突状态: 他可以看到一对冲突的修改集,并手工的选择保留一组修改。需要注意的是软件不能自动的解决冲突,只有人可以理解并作出智能的选择,一旦 Harry 手工的解决了冲突(也许需要与 Sally 讨论),他就可以安全的把合并的文件保存到版本库。

最后,一切都要归结到一条重要的因素: 用户交流。当用户交流贫乏,语法和语义的冲突就会增加,没有系统可以强制用户完美的交流,没有系统可以检测语义上的冲突,所以没有任何证据能够承诺锁定系统可以防止冲突,实践中,锁定除了约束了生产力,并没有做什么事。

有一种情况下锁定-修改-解锁模型会更好,也就是你有不可合并的文件,例如你的版本库包含了图片,两个人同时编辑这个文件,没有办法将这两个修改合并,Harry Sally 会丢失他们的修改。

一个 Subversion 工作副本是你本地机器一个普通的目录,保存着一些文件,你可以任意的编辑文件,而且如果是源代码文件,你可以像平常一样编译,你的工作副本是你的私有工作区,在你明确的做了特定操作之前,Subversion 不会把你的修改与其他人的合并,也不会把你的修改展示给别人。当对工作副本中的文件做了一些更改并确认他们能够正常工作后,Subversion 提供将这些更改公布给同项目的其他人员的命令(通过写入版本库)。如果其他人公布他们的更改,Subversion 提供将这些更改合并到工作副本的命令(通过读取本版本库)

svn commit 操作可以作为一个原子事务操作发布任意数量文件和目录的修改。在你的工作副本中,你可以改变文件内容,创建、删除、改名和复制文件和目录,然后作为一个整体提交。

在版本库中,每次提交被当作一次原子事务操作: 要么所有的改变发生,要么都不发生,Subversion努力保持原子性以应对程序错误、系统错误、网络问题和其他用户行为。

每当版本库接受了一个提交,文件系统进入了一个新的状态,叫做版本,每个版本被赋予一个独一无二的自然数,一个比一个大,初始修订号是 0,只创建了一个空目录,没有任何内容。

可以形象的把版本库看作一系列树,想象有一组版本号,从 0 开始,从左到右,每一个修订号有一个目录树挂在它下面,每一个树好像是一次提交后的版本库"快照"。

全局版本号

需要特别注意的是,工作副本并不一定对应版本库中的单一版本,他们可能包含多个版本的文件。

工作副本怎样跟踪版本库

对于工作副本的每一个文件Subversion 在管理目录 .svn/ 记录两项关键的信息:

what revision your working file is based on (this is called the file's working revision)

一个本地副本最后更新的时间戳。

给定这些信息,通过与版本库通讯,Subversion 可以告诉我们工作文件是处与如下四种状态的那一种:

未修改且是当前的

文件在工作目录里没有修改,在工作版本之后没有修改提交到版本库。svn commit 操作不做任何事情,svn update 不做任何事情。

本地已修改且是当前的

工作副本已经修改,从基准版本之后没有修改提交到版本库。本地修改没有提交,因此 commit 会成功的提交,update 不做任何事情。

本地未修改且过时

这个文件在工作副本没有修改,但在版本库中已经修改了。这个文件应当更新到最新公共版本。commit 不做任何事情,update 将会更新工作副本到最新的版本。

本地已修改且过时

这个文件在工作副本和版本库中都被修改了。提交该文件将会因为过时而失败。该文件应该先更新; 更新命令将会尝试合并公共更改和本机更改。如果 Subversion 不能顺利的自动完成合并,则需要用户解决冲突。

在本地建立一个本地版本库存储空间(只适用于一个开发者,或者多人通过网络磁盘共享访问)

使用命令行工具创建(本地)版本库

创建一个名为SVN(例如D:\SVN\)的空文件夹,作为你的所有版本库的根。

1.D:\SVN\里创建另一个目录MyNewRepository

2.Open the command prompt (or DOS-Box), change into D:\SVN\ and type

svnadmin create --fs-type fsfs MyNewRepository

现在你在D:\SVN\MyNewRepository创建了一个新的版本库。

使用 TortoiseSVN 创建(本地)版本库

1. 打开资源管理器

2. 创建一个新的文件夹,命名为SVNRepository

3. 右键单击新建的文件夹并选择 TortoiseSVN 在此创建版本库(Create repository here)...

然后就会在新文件夹创建一个版本库,不要手工编辑这些文件!!!如果你得到什么警告,一定要先确定目录非空并且没有写保护。

TortoiseSVN 将会在创建版本库时为其设置一个特定的文件夹图标,便于辨别本地版本库。如果使用官方的命令行客户端创建版本库则不会设置文件夹图标。

We also recommend that you don't use file:// access at all, apart from local testing purposes. Using a server is more secure and more reliable for all but single-developer use.

本地访问版本库

  • 为了访问本地版本库,你需要这个文件夹的路径,只要记住Subversion期望所有的版本库路径使用的形式为file:///C:/SVNRepository/,请注意全部使用的是斜杠。
  • 为了访问网络共享中的版本库,你可以使用驱动器影射或使用UNC路径,对于UNC路径,形式为file://ServerName/path/to/repos/,请注意这里前面只有两个斜杠。
  • SVN 1.2之前,UNC路径曾经是一种非常晦涩的格式file:///\ServerName/path/to/repos,这种格式依然支持,但不推荐。

访问网络共享磁盘上的版本库

Although in theory it is possible to put a FSFS repository on a network share and have multiple users access it using file:// protocol, this is most definitely not recommended. In fact we would strongly discourage it, and do not support such use for various reasons:

首先,这样赋予所有用户对版本库的写权限,所以任何一个用户都可能意外的删除整个版本库,或者因为别的问题导致版本库不可用。

其次,不是所有的网络文件共享协议都支持 Subversion 需要的文件锁定,所以你会发现你的版本库被毁了。它也许不会马上发生,但是总有一天会有 2 个用户同时访问版本库。

第三,文件的权限必需设置得井井有条。也许 Windows 的共享可以避开这个问题,但是在 SAMBA(一种文件共享协议)中却是相当困难的。

If one person installs a newer version of the client which upgrades the repository format, then everyone else will be unable to access the repository until they also upgrade to the new client version.

file:// 访问是为本机工作而准备的,只能单用户访问,特别是测试和调试。当你打算共享版本库的时候,你真的需要设置一个适当的服务器,而且它并不像你想象的那样困难。

版本库布局

在将你的数据导入到版本库之前,首先你得考虑如何组织你的数据。如果你使用一种推荐的布局,你在后面的操作将会更容易许多。

有一些标准的,推荐使用的组织版本库结构的方法。大多数人创建一个 trunk 目录掌管开发的 "主干",一个 branches 目录存放分支副本,以及一个 tags 目录存放标记副本。如果一个版本库只掌管一个项目,那么人们通常创建这些顶级目录:

/trunk

/branches

/tags

因为这个布局非常通用,所以当使用 TortoiseSVN 创建版本库时,它会提出帮你创建这个目录结构。

如果一个版本库包含多个项目,人们通常按分支来安排布局:

/trunk/paint

/trunk/calc

/branches/paint

/branches/calc

/tags/paint

/tags/calc

……或者按项目:

/paint/trunk

/paint/branches

/paint/tags

/calc/trunk

/calc/branches

/calc/tags

如果项目不是密切相关,而且每一个是单独被检出,那么按项目布局是合理的。对于那些你想一次检出所有项目,或需要将它们打成一个分发包的相关项目,按分支来布局通常比较好。这种方式你只要检出一个分支,而且子项目之间的关系也比较清楚。

 

如果你采用顶层/trunk /tags /branches这种方式,并不意味着你必须复制整个主线为分支或标签,而且某些情况下这种结构更具灵活性。

 

对于不相关的项目,你可能更愿意使用不同的版本库。当你提交时,改变的是整个版本库的修订号,而不是项目的。让两个不相关的项目共用一个版本库,会导致修订号出现较大的跳跃。SubversionTortoiseSVN项目看起来是在同一个主机地址,但是它们是在完全独立的版本库中开发着,并且版本号也不相干。

 

当然,你完全可以不理会上面提及的通用布局。你可以自由改变,来满足你和你团队的需要。请记住,不管你选择哪种布局,它都不是永久的。你可以在随时重新组织你的版本库。因为分支和标签是普通的目录,只要你愿意,TortoiseSVN 可以将它们移动或重命名。

 

从一种布局转换到另一种布局仅仅是在服务器端移动一些文件或目录;如果你不喜欢版本库的组织形式,仅管大胆地修改那些目录。

 

因此,如果你还没有在版本库中创建基本的文件夹结构,你应该立刻创建。创建文件夹有 2 种方法

如果你只想创建一个 /trunk /tags /branches 结构,你可以使用版本库浏览器创建这 3 个文件夹(独立的 3 次提交)。如果你想创建一个层次更深的结构,那么更简单的做法是先在硬盘中创建好文件夹结构,然后将其导入(只有 1 次提交),就像这样:

1. 在你的硬盘上创建一个空的文件夹

2. 在那个文件夹下创建你想要的顶级目录--千万不要放任何文件进去!

3. 将这个结构导入版本库中,只需右键单击包含这个结构的文件夹并选择 TortoiseSVN 导入...。在导入对话框中输入版本库的 URL 并单击确定。这样就会将临时文件夹导入版本库中创建基本布局。

Note that the name of the folder you are importing does not appear in the repository, only its contents. For example, create the following folder structure:

C:\Temp\New\trunk

C:\Temp\New\branches

C:\Temp\New\tags

 

Import C:\Temp\New into the repository root, which will then look like this:

/trunk

/branches

/tags

右键导入的文件夹是作为远程版本库的根目录。

版本库备份

无论你使用何种版本库,定期维护和验证版本库备份非常重要,或许你可以访问最近版本的文件,但是如果没有版本库,所有的历史将会丢失。

The simplest (but not recommended) way is just to copy the repository folder onto the backup medium. However, you have to be absolutely sure that no process is accessing the data. In this context, access means any access at all. If your repository is accessed at all during the copy, (web browser left open, WebSVN, etc.) the backup will be worthless.(备份期间,不能有连接访问版本库)

The recommended method is to run (热备份)

svnadmin hotcopy path/to/repository path/to/backup

to create a copy of your repository in a safe manner. Then backup the copy.

The svnadmin tool is installed automatically when you install the Subversion command line client. The easiest way to get this is to check the option to include the command line tools when installing TortoiseSVN, but if you prefer you can download the latest version of command line tools directly from the Subversion [http://subversion.apache.org/packages.html#windows] website.

服务器端钩子脚本

A hook script is a program triggered by some repository event, such as the creation of a new revision or the modification of an unversioned property. Each hook is handed enough information to tell what that event is, what target(s) it's operating on, and the username of the person who triggered the event. Depending on the hook's output or return status, the hook program may continue the action, stop it, or suspend it in some way. Please refer to the chapter on Hook Scripts [http://svnbook.red-bean.com/en/1.8/svn.reposadmin.create.html#svn.reposadmin.create.hooks] in the ubversion Book for full details about the hooks which are implemented.

这些钩子脚本被版本库所在的服务器执行。TortoiseSVN 也允许你配置由确定事件触发,在本地执行的客户端脚本

Sample hook scripts can be found in the hooks directory of the repository. These sample scripts are suitable for Unix/Linux servers but need to be modified if your server is Windows based. The hook can be a batch file or an executable. The sample below shows a batch file which might be used to implement a pre-revprop-change hook.(版本属性修改之前触发的脚本)

rem Only allow log messages to be changed.

if "%4" == "svn:log" exit 0

echo Property '%4' cannot be changed >&2

exit 1

Note that anything sent to stdout(标准输出界面cmd界面) is discarded. If you want a message to appear in the Commit Reject dialog you must send it to stderr(标准错误). In a batch file this is achieved using >&2.

If a hook script rejects your commit then its decision is final. But you can build an override mechanism into the script itself using the Magic Word technique. If the script wants to reject the operation it first scans the log message for a special pass phrase, either a fixed phrase or perhaps the filename with a prefix. If it finds the magic word then it allows the commit to proceed. If the phrase is not found then it can block the commit with a message like "You didn't say the magic word". :-)(你可以通过白名单放行一些文件的提交命令)

检出链接

如果你希望你的 Subversion 版本库对于别人可用,你可以在你的站点包含一个链接。为了让其更加容易访问,你可以为其它 TortoiseSVN 用户包含一个检出链接。

当你安装了 TortoiseSVN,它会注册一个 tsvn: 协议,当 TortoiseSVN 用户点击这样一个链接,检出窗口会自动弹出,且版本库 URL 已经填入。

想要在你个人的 html 页面中加入这样的链结,只需要添加像这样的代码即可:

<a href="tsvn:http://project.domain.org/svn/trunk"></a>

当然,如果能插入一张合适的图片会看起来更好。你可以使用 TortoiseSVN 标志或者你自己的图片。

<a href="tsvn:http://project.domain.org/svn/trunk"><img src=TortoiseCheckout.png></a>

你同样可以使链接指向一个特定的版本,例如

<a href="tsvn:http://project.domain.org/svn/trunk?100"></a>

访问版本库

  • 要使用 TortoiseSVN (或其它 Subversion 客户端程序),需要定位版本库的所在之处。版本库可以位于本机使用 file:// 协议访问,或者位于服务器端使用 http:// 或 svn:// 协议访问。这两个服务器协议都可以加密。那就是 https:// 或 svn+ssh://, 抑或带 SASL 加密的 svn://。
  • 如果你使用公共的主机服务,例如 Google Code [http://code.google.com/hosting/],或者已经有人为你架设好了服务器,那么在这里你不用做什么。
  • 如果你没有服务器并且独自工作,或者只是想在独立的环境下评估 Subversion 和 TortoiseSVN,那么本地版本库可能是你最好的选择。
  • 如果你打算在网络共享中设者一个多用户的版本库,请重新考虑。

日常使用指南

本文目的在与描述TortoiseSVN客户端的日常使用。不是一个版本控制系统指南,也不是Subversion(SVN)的指南。本文档的价值在于,当你知道大概要做什么,却又记不起应该怎么做的时候,可以有个参考的地方。

This section describes some of the features of TortoiseSVN which apply to just about everything in the manual. Note that many of these features will only show up within a Subversion working copy.(下面所讲的一切特性,只会出现在工作副本中)

图标重载

可以通过Setting修改不同的风格

重载的图标显示在你的工作副本文件上。你一眼就可以看到文件被修改过了。

右键菜单

版本控制下(工作副本文件夹上)一个目录的右键菜单

一个命令是否显示取决于这个文件或文件夹或者它们的父文件夹是否受版本控制,你也可以将TortoiseSVN的菜单作为资源管理器菜单的一部分。

某些很少被用到的命令只出现在扩展右键菜单中。要想打开扩展右键菜单,需要在 右键单击 时按住 Shift 键。(在某些情况下,你可能看到多个TortoiseSVN条目。这不是BUG!)

在一个版本控制的文件夹下资源管理器文件菜单中的快捷方式。

本示例是在一个受控文件夹下的某个未受控的快捷方式, 在资源管理器的文件菜单下有三个TortoiseSVN条目。一个是受控文件夹本身的,一个是快捷方式本身的,第三个是快捷方式所指向的对象。为了帮助你区分它们,菜单条目的图标的右下角有标志,表明是文件、快捷方式、文件夹或是选中了多项。

This example is for an unversioned shortcut within a versioned folder, and in the Explorer file menu there are three entries for TortoiseSVN. One is for the folder, one for the shortcut itself, and the third for the object the shortcut is pointing to. To help you distinguish between them, the icons have an indicator in the lower right corner to show whether the menu entry is for a file, a folder, a shortcut or for multiple selected items.

在工作副本里右键拖拽文件或目录到新的位置,或者右键拖拽一个非版本控制的文件或文件夹到一个版本控制目录下的时候,右键菜单还能够出现其他的命令。

常用快捷方式

F5 刷新当前视图。这也许是单键命令中唯一一个最常用的了。比如... 在资源浏览器中,这个键可以刷新工作副本中的图标重载。在提交对话框中,它可以重新扫描查找哪些是需要提交的。在版本日志对话框中,可以重新联系版本库以检查更多的最近修改情况。

认证

如果连接的版本库需要密码,就会显示认证对话框。

输入你的用户名和密码。复选框能让 TortoiseSVN 在 Subversion 的缺省目录: %APPDATA%\Subversion\auth 的三个子目录内保存认证信息:

• svn.simple 里包含了基本认证方式所需要的认证信息(用户名/密码)。注意,保存的密码是通过WinCrypt API 加密的,不是文本形式。

• svn.ssl.server 里包含了SSL服务器证书。

• svn.username 里包含了用户名认证的认证信息(不需要提供密码)。

If you want to clear the authentication cache, you can do so from the Saved Data page of TortoiseSVN's settings dialog. The button Clear all will clear the cached authentication data for all repositories. The button Clear... however will show a dialog where you can chose which cached authentication data should be deleted.

可以通过TortoiseSVN客户端删除认证,也可以很暴力的直接删除%APPDATA%\Subversion\auth文件夹和其内容删除认证。

Some people like to have the authentication data deleted when they log off Windows, or on shutdown. The way to do that is to use a shutdown script to delete the %APPDATA%\Subversion \auth directory, e.g.

 

@echo off

rmdir /s /q "%APPDATA%\Subversion\auth"

还可以写个关机脚本,自动删除%APPDATA%\Subversion\auth文件夹和其内容

You can find a description of how to install such scripts at http://www.windows-help-central.com/windows-shutdown-script.html.

导入数据到版本库

如果将项目导入一个已经含有其它项目的版本库中,那么版本库的结构已经确定了。如果要导入一个新的版本库中,那么最好花点时间来想一下如何设置版本库的结构。

This section describes the Subversion import command(导入命令), which was designed for importing a directory hierarchy(目录层次) into the repository in one shot(一次性). Although it does the job, it has several shortcomings:(虽然该方法可行,但是有几个缺点)

  • 不能选择包括哪些文件或文件夹,除非使用全局忽略设置。
  • 导入的文件夹不能变成工作副本。你必须通过签出操作从服务器拿回文件。
  • 很容易导入到版本库中错误的文件夹层次。

因此不建议直接导入而是通过文章后面介绍的两步法导入 , unless you are performing the simple step of creating an initial /trunk /tags /branches structure in your repository. Since you are here, this is how the basic import works ...

在将你的项目导入到版本库之前,你应该:

1. 删除所有构建工程不需要的文件(临时文件,编译器产生的文件,例如 *.obj,生成的二进制文件,...)

2. 组织目录和子目录内的文件。尽管以后可以改名/删除文件,我们还是建议你在导入之前使你的项目结构组织良好!

现在进入资源管理器,选择你的项目的顶层目录,右击打开上下文菜单。选择命令TortoiseSVN → 导入 ...,它会弹出一个对话框:

In this dialog you have to enter the URL of the repository location where you want to import your project. It is very important to realise that the local folder you are importing does not itself appear in the repository, only its content.

Note that the import command will automatically create subdirectories within the repository if they do not exist.如果服务端版本库没有指定路径,则在导入时会自动创建。

在文件夹上右键导入,不会导入该文件夹本身,而是导入该文件夹下的内容到服务端版本库的主目录下。

默认情况下,匹配全局忽略模式的文件和文件夹不会被导入。你可以使用包含忽略文件检验栏来禁止此行为。

当你点击确认时,TortoiseSVN 会导入包含所有文件的完整目录树到版本库。现在这个工程就存贮在版本库,被版本控制。请注意,你导入的文件夹没有被版本控制!你需要检出刚才导入的版本,以便获得受版本控制的工作副本。

导入适当的位置

假定你已经有个版本库,你想给它增加一个新目录结构,只需以下步骤:

1. Use the repository browser to create a new project folder directly in the repository.If you are using one of the standard layouts you will probably want to create this as a sub-folder of trunk rather than in the repository root. The repository browser shows the repository structure just like Windows explorer, so you can see how things are organised.(通过repository browser直接在服务端版本库内创建目录结构)

2. Checkout the new folder over the top of the folder you want to import. You will get a warning that the local folder is not empty. Ignore the warning. Now you have a versioned top level folder with unversioned content.

3. 在此受版本控制的文件夹上使用TortoiseSVN → 增加...增加部分或全部内容。你可以增加或删除文件,在文件夹上设置svn:ignore属性,或者你需要的其它修改。

4. 提交顶级目录,你有一个新的版本树,一份从你已有目录创建的本地工作副本。(先全部下载版本库里的文件,然后调整并增加新目录结构,然后提交到版本库)

专用文件

有时候你需要版本控制一个包含用户专用的数据。它意味着你有一个文件,每个开发者/用户都需要修改,一边满足他/她的本地配置。但是版本控制这样的文件是困难的,因为每个用户可能都要提交他/她的修改。

在这种情况下,我们建议使用模版文件。创建一个包含所有开发者需要的数据的文件,增加到版本库中,让开发者检出。然后,每个开发者创建一个副本,改名此文件。于是,修改这个文件不再是问题。

As an example, you can have a look at TortoiseSVN's build script. It calls a file named default.build.user which doesn't exist in the repository. Only the file default.build.user.tmpl. default.build.user.tmpl is the template file which every developer has to create a copy from and rename that file to default.build.user. Inside that file, we added comments so that the users will see which lines they have to edit and change according to their local setup to get it working.(通过脚本实现模板文件)

So as not to disturb the users, we also added the file default.build.user to the ignore list of its parent folder, i.e. we've set the Subversion property svn:ignore to include that filename. That way it won't show up as unversioned on every commit.

检出工作副本

为了得到一个工作副本,需要进行从版本库检出的操作。

在Windows资源管理器里选择一个存放工作副本的目录。右键点击弹出右键菜单,选择TortoiseSVN →检出…命令。然后就会看到下面的对话框:

如果输入一个并不存在的目录名,那么这个名字的目录就会被创建出来。

In the default setting, the checkout menu item is not located in the TortoiseSVN submenu but is shown at the top explorer menu. TortoiseSVN commands that are not in the submenu have SVN prepended: SVN Checkout...(Checkout菜单在主菜单显示)

检出深度

你可以选择要检出的深度,它允许你指定子目录递归的深度。如果你只需要大目录中的几个子条目,你可以只检出最高层目录,然后递归的更新选择的目录。

全递归Fully recursive

检出完整的目录树,包含所有的文件或子目录。

直接子节点,包含文件夹Immediate children, including folders

检出目录,包含其中的文件或子文件夹,但是不递归展开子文件夹。

仅文件子节点Only file children

检出指定目录,包含所有文件,但是不检出任何子文件夹。

仅此项Only this item

只检出目录。不包含其中的文件或子文件夹。

工作副本Working copy

保持工作副本指定的深度。此选项不用于检出对话框,但它是其它所有含有深度配置对话框的默认配置。

排除Exclude

对于已经创建好的工作副本,可以使用此选项来缩减文件夹的深度。这个选项只在更新至版本对话框中可用。

To easily select only the items you want for the checkout and force the resulting working copy to keep only those items, click the Choose items... button. This opens a new dialog where you can check all items you want in your working copy and uncheck all the items you don't want. The resulting working copy is then known as a sparse checkout. An update of such a working copy will not fetch the missing files and folders but only update what you already have in your working copy.

自定义深度检出按钮

  • Sparse Update using Update to Revision【TortoiseSVN → Update to Revision and select Choose items....】
  • Sparse Update using Repo Browser【TortoiseSVN → Repo-Browser to bring up the repository browser. Find the sub-folder you would like to add to your working copy, then use Context Menu → Update item to revision....】
  • Sparse Update using Check for Modifications【first shift click on the button Check repository. The dialog will show all the files and folders which are in the repository but which you have not checked out as remotely added. Right click on the folder(s) you would like to add to your working copy, then use Context menu → Update.】

改变工作副本深度

一旦以某个深度检出了工作副本后,以后还可以修改这个深度来获得更多或更少的内容,使用 右键菜单 → 更新该项至版本。在弹出的对话框中,确认选中了 粘滞深度 复选框。

使用旧版本服务器

1.5 版之前的服务器不支持工作副本深度请求。所以不能有效的处理这种请求。不过该命令仍然可以使用,但是旧版本的服务器会发送所有的数据,让客户端来过滤掉哪些是不需要的,这就意味着大量的网络传输。如果可能,应该将服务器升级到 1.5 版以上。

如果项目含有外部项目的引用,而这些引用你不希望同时检出,请选中忽略外部项目复选框。

如果选中了 忽略外部项目,或者想要增加深度值,你应该使用 TortoiseSVN → 更新至版本... 替代 TortoiseSVN → 更新 来对工作副本进行更新。标准的更新操作会包含外部项目并保持深度。

强烈建议你只检出 trunk 或更低层的目录树。如果你在 URL 中指定了根路径,你的硬盘有可能被塞满,因为你将会得到整个版本库树的副本,包括项目所有的分支和标签(tag)!

将你的修改提交到版本库

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

提交对话框

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

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

To quickly check or uncheck types of files like all versioned files or all modified files,click the link items just above the list of shown items.(点击上面的链接,快速选择需要的项目)

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

提交文件还是文件夹?

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

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

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

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

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

• add the file to the svn:global-ignores list using TortoiseSVN → Add to ignore list (recursively递归地) This will affect the directory on which you set the svn:global-ignores property and all subfolders as well.(全局忽略)

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

递归该动作。

在底部面板中显示的列是可定制的。如果你右击任何一列的头部,你就会看到一个上下文菜单,允许你选择哪一列要显示。还可以在鼠标移动到列边界时通过拖动手把来改变列的宽度。这些定制的内容都会被保留下来,下一次你会见到相同的列。缺省情况下,当你成功提交修改后,你在这些文件上持有的锁会被自动释放。如果你需要保留锁,请确认选中检查框保留锁。此检查框的缺省状态从 Subversion 配置文件的 no_unlock 选项获取。

Warning when committing to a tag

Usually, commits are done to the trunk or a branch, but not to tags. After all, a tag is considered fixed and should not change.(一般只针对trunk和branch提交,tags不提交)

If a commit is attempted to a tag URL, TortoiseSVN shows a confirmation dialog first to ensure whether this is really what is intended. Because most of the time such a commit is done by accident.However, this check only works if the repository layout is one of the recommended

ones, meaning it uses the names trunk, branches and tags to mark the three main areas. In case the setup is different, the detection of what is a tag/branch/trunk (also known as classification patterns)

拖放

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

你可以将未版本控制的文件拖到工作副本提交对话框中,它们就会被自动增加。从提交对话框底部的列表中将文件拖拽到日志消息编辑框中,就能以文本格式将文件的路径插入编辑框中。当你想将本次提交相关的文件路径插入日志消息中时该功能非常有用。

修复外部改名

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

修复外部复制

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

Commit only parts of files只提交文件的部分

Sometimes you want to only commit parts of the changes you made to a file. Such a situation usually happens when you're working on something but then an urgent fix needs to be committed, and that fix happens to be in the same file you're working on.

right click on the file and use Context Menu → Restore after commit. This will create a copy of the file as it is. Then you can edit the file, e.g. in a text editor and undo all the changes you don't want to commit. After saving those changes you can commit the file.

使用 TortoiseMerge

If you use TortoiseMerge to edit the file, you can either edit the changes as you're used to, or mark all the changes that you want to include. right click on a modified block and use Context Menu → Mark this change to include that change. Finally right click and use Context Menu → Leave only marked changes which will change the right view to only include the changes you've marked before and undo the changes you have not marked.(在合并工具里右侧右键菜单标记改变和取消标记)

After the commit is done, the copy of the file is restored automatically, and you have the file with all your modifications that were not committed back.(自动保存)

从提交列表中排除项目

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

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

提交日志信息

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

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

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

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

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

The log message window also includes a commit message snippet facility. These snippets?are shown in the autocomplete dropdown once you type a snippet shortcut, and selecting the snippet in the autocomplete dropdown then inserts the full text of the snippet. The snippets supplied with TortoiseSVN are held in the TortoiseSVN installation bin folder. You can also define your own snippets and store them in %APPDATA%\TortoiseSVN\snippet.txt. # is the comment character. Newlines can be inserted by escaping them like this: \n and \r. To insert a backslash, escape it like this: \\.(可以自定义一些快捷短语)

你可以重复使用先前键入的日志信息。只需要点击最近信息即可查看你为此工作副本键入的最近几条信息。你可以从 TortoiseSVN 的设置窗口的已保存数据页中清除所有的保存消息,或者你可以在最近信息对话框中使用 Delete 键单独删除某条消息。

如果想要在日志信息中加入选中的文件的名称和状态,可以在编辑框中使用 右键菜单 → 粘贴文件名列表。另一个向日志消息中插入路径的方法是: 从文件列表中将文件拖拽到文本框中

与缺陷跟踪工具集成

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

提交进程

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

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

  • 蓝色 提交一个修改。
  • 紫色 提交一个新增项。
  • 深红 提交一个删除或是替换。
  • 黑色 所有其他项。

这是默认的配色方案,但你可以通过设置对话框来定制这些颜色。

用来自别人的修改更新你的工作副本

你需要定期地确保将别人所做的修改整合到你本地的工作副本中。从服务器获取更改到本地副本的过程就叫做 更新。更新的对象可以是一个文件,选中的多个文件或者对整个目录结构进行递归。要进行更新,选中要更新的文件或目录,右键单击然后选中右键菜单中的 TortoiseSVN → 更新。将会弹出一个窗口,随着更新的进行显示进度。其他人所做的更改将会合并到你的文件中,并保留同一个文件中你所做的更改。版本库 不会 受更新影响。

进度对话框使用颜色代码来高亮不同的更新行为

  • 紫色 新项已经增加到你的工作副本中。
  • 深红 你的工作副本中删除了多余项,或是你的工作副本中丢失的项被替换。
  • 绿色 版本库中的修改与你的本地修改成功合并。
  • 亮红 来自版本库的修改在与本地修改合并时出现了冲突,需要你解决。
  • 黑色 你的工作副本中的没有改动的项被来自版本库中新版本所更新。

这是默认的配色方案,但你可以通过设置对话框来定制这些颜色。

如果在更新过程中发生了 冲突 (有可能是因为你和他人修改了同一个文件的同一行并且这些更改不匹配)那么对话框会用红色显示冲突。可以通过 双击 那些行来启动外部合并工具解决冲突。等更新结束后,对话框会在文件列表的底部显示一段总结,包括已更新、已添加、已删除、冲突等情况的条目数量。可以使用 Ctrl+C 将这段信息复制到剪贴板。

The standard Update command has no options and just updates your working copy to the HEAD revision of the repository, which is the most common use case. If you want more control over the update process, you should use TortoiseSVN → Update to Revision... instead. This allows you to update your working copy to a specific revision, not only to the most recent one.

You can also choose whether to ignore any external projects in the update (i.e. projects referenced using svn:externals).

如果你将文件或文件夹更新至某个特定版本,就不应该修改这些文件。当提交它们时会得到错误消息 "过期"!如果你想撤销某个文件的更改然后从先前的版本开始重新开始,可以从版本日志对话框中回滚至先前的版本。

当要查看你的项目在过去的某个时间是什么样子时, 更新至版本 功能有时会很有用。但一般来说,更新单个文件到一个较早的版本不是一个好主意,因为这样就使工作副本处于一种不一致的状态。如果更新的文件改变了文件名,你甚至会发现该文件从你的工作副本中消失了,因为在较早的版本中没有叫这个名字的文件。也还会发现该条目显示正常的绿色图标重载,所以很难察觉到存在过期的文件。

如果你只是想要某文件早先版本的本地副本,从该文件的日志对话框中使用 右键菜单 → 保存版本至... 更好。

多文件/文件夹

如果你在资源管理器中选择了多文件和文件夹,然后选择更新,这些文件/文件夹一个接一个的被更新。TortoiseSVN确保所有的来自同一版本库的文件/文件夹被更新到同一个版本!即使在更新过程中发生了另一个提交。

解决冲突

偶尔,当你从版本库更新、合并文件时,或者切换工作副本至一个不同的 URL 时你会遇到冲突。有两种冲突:

文件冲突 当两名(或更多)开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。

树冲突 当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。

文件冲突

A file conflict occurs when two or more developers have changed the same few lines of a file. As Subversion knows nothing of your project, it leaves resolving the conflicts to the developers. The conflicting area in a text file is marked like this:

<<<<<<< filename

your changes

=======

code merged from repository

>>>>>>> revision

Also, for every conflicted file Subversion places three additional files in your directory:

文件名.扩展名.mine(filename.ext.mine 这是你的文件,在你更新你的工作副本之前存在于你的的工作副本中——也就是说,没有冲突标志。这个文件除了你的最新修改外没有别的东西。

文件名.扩展名.r旧版本(filename.ext.rOLDREV这是在你更新你的工作副本之前的基础版本(BASE revision)文件。也就是说,它是在你做最后修改之前所检出的文件。

文件名.扩展名.r新版本(filename.ext.rNEWREV这个文件是当你更新你的工作副本时,你的 Subversion 客户端从服务器接收到的。这个文件对应于版本库中的最新版本。

You can either launch an external merge tool / conflict editor with TortoiseSVN → Edit Conflicts (TortoiseSVN → Edit Conflicts)or you can use any text editor to resolve the conflict manually. You should decide what the code should look like, do the necessary changes and save the file. Using a merge tool such as TortoiseMerge or one of the other popular tools is generally the easier option as they generally present the files involved in a 3-pane view and you don't have to worry about the conflict markers. If you do use a text editor then you should search for lines starting with the string <<<<<<<.(冲突部分以<<<<<<<.开始标记)

然后,执行命令 TortoiseSVN → 已解决(TortoiseSVN → Resolved)并提交人的修改到版本库。需要注意的是已解决命令并不是真正的解决了冲突,它只是删除了文件 文件名.扩展名.mine 和 文件名.扩展名.r*,允许你提交修改。

如果你的二进制文件有冲突,Subversion不会试图合并文件。本地文件保持不变(完全是你最后修改时的样子),但你会看到文件名.扩展名.r*文件。如果你要撤消你的修改,保留版本库中的版本,请使用SVN 还原(Revert)命令。如果你要保持你的版本覆盖版本库中的版本,使用已解决命令,然后提交你的版本。

你可以右击父文件夹,选择TortoiseSVN → 已解决...,(TortoiseSVN → Resolved...)使用"已解决"命令来解决多个文件。这个操作会出现一个对话框,列出文件夹下所有有冲突的文件,你可以选择将哪些标记成已解决。

属性冲突

当两名或更多的开发人员修改了某个文件的属性时就会发生属性冲突。属性作为文件的一部分,解决属性冲突只能由开发人员来完成。

如果一个更改必须被另一个覆盖,那么就在 使用本地属性解决 和 使用远程属性解决 中选择一个。如果更改想要被合并,那就选择 手工编辑属性,选出所要的属性值然后标记为已解决。

树冲突

当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。有很多种不同的情形可以导致树冲突,而且不同的情形需要不同的步骤来解决冲突。

当一个文件通过 Subversion 在本机删除后,文件也从本机文件系统中删除。因此即使它是树冲突的一部分,却既不能显示冲突的叠加图标也不能通过右键单击来解决冲突。使用检查修改对话框来获得编辑冲突选项。

TortoiseSVN 能够协助找到合并更改的正确位置,但是需要作一些额外的工作来整理冲突。请牢记: 当进行一次更新操作后,工作副本的基础文件将会包括每一个项目在执行更新操作时版本库中的版本。如果你在进行更新后再撤销更改,工作副本将返回到版本库的状态,而不是你开始进行更改前的状态。

本地删除,当更新时有更改进入

本地更改,当更新时有删除进入

本地删除,当更新时有删除进入

本地缺少,当合并时有更改进入

本地更改,当合并时有删除进入

本地删除,当合并时有删除进入

其它树冲突

TortoiseSVN 加入了被称为重载图标的功能重载了原始的文件图标。根据文件的 Subversion 状态的不同,重载的图标也不同。

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

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

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

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

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

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

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

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

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

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

详细状态

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

本地与远程状态

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

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

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

蓝色 本地被修改过的项

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

深红 删除的或是丢失的项。

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

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

黑色 未修改和未受控的项。

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

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

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

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

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

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

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

修复外部改名

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

修复外部复制

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

查看差别

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

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

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

修改列表

理想情况下,你任何时候都只做一件事,你的工作副本只包含一个逻辑修改集合。很好,回到现实。你经常会同时做几件不相关的事,当你察看提交对话框时,所有修改混到一起。修改列表特性帮助你分组,让你容易看到正在做什么。当然它只能在修改不重合的时候工作。如果两个不同的任务影响到同一个文件,没有办法隔离修改。

在很多地方可以看到修改列表,但是最常见的是提交对话框和检查修改对话框。让我们从检查修改对话框开始--在你完成了多个特性和很多文件后的检查修改对话框。当你第一次打开对话框,所有的修改过的文件被列在一起。假设你现在想要组织任务并且按照特性将这些文件分组。

选择一个或多个文件并且使用右键菜单 → 移动到修改列表可以增加一个项目到修改列表。最初没有修改列表,所以你第一次做的时候,会创建一个新的修改列表。给出一个能描述它的作用的名称,然后点击确定。提交对话框会改变为显示项目分组。

当你创建好修改列表后,你就可以将文件拖放进去,既可以从其它修改表中拖过去,也可以从 Windows资源管理中拖过去。将一个未被修改的文件加入修改列表时,从 Windows 资源管理器拖拽就很有用。你可以在检查修改对话框中这样做,但要显示未修改的文件。

在提交对话框中可以看到被修改列表分组的那文件。除了分组可以直接指示之外,你也可以使用组头选择提交哪些文件。

TortoiseSVN 保留了一个它自己使用的修改列表名称--ignore-on-commit。这个列表用于标记某些版本控制的文件,它们在本地被修改你却不打算提交他们。

当提交属于修改列表的文件后,通常情况下用户不再需要修改列表的成员关系。所以在默认情况下,当提交时文件会从修改列表中除去。如果你希望文件被保留在更改列表中,选中提交对话框底部的 保持修改列表

Note that if you use changelists, externals will no longer show up in their own groups anymore. Once there are changelists, files and folders are grouped by changelist, not by external anymore.

版本日志对话框

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

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

• 最上方的面板显示了版本的列表。这其中包含了日期和时间,以及提交的用户和日志信息开头的部分内容。

以蓝色显示的行表示某些内容被复制到该开发版本中(可能是从一个分支中复制而来)。

• 中间的面板显示了被选中的版本的完整的日志信息。

• 最下面的面板显示了被选中版本中都对哪里文件和文件夹进行了修改。

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

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

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

• 从属性页中调用

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

• From the repository browser

版本日志动作

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

  • 如果某个版本修改了文件或目录,已修改 图表就会在首列显示。
  • 如果某个版本增加了文件或目录,已增加 图表就会在第二列显示。
  • 如果某个版本删除了文件或目录,已删除 图表就会在第三列显示。
  • 如果某个版本替换了文件或目录,已替换 图标就会在第四列显示。
  • If a revision moved or renamed a file or directory, the moved icon is shown in the fourth column.(移动或重命名)
  • If a revision replaced a file or directory by moving/renaming it, the move replaced icon is shown in the fourth column.(替换)
  • If a revision merged a file or directory, the merged icon is shown in the fourth column.(合并)
  • If a revision reverse merged a file or directory, the reverse merged icon is shown in the fourth column.(逆合并)

与工作副本比较Compare with working copy

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

与工作基础版本比较并追溯Compare and blame with working BASE

追溯文件的选中版本与你工作的 BASE 版本,使用可视化差异工具显示差异。

以标准差异文件显示改变Show changes as unified diff

将选中的版本作为单一差异文件(GNU补丁格式)查看。相对于可视化的文件比较器,它更难阅读,但它将所有的变化显示在一个格式更为紧凑的文件中。If you hold down the Shift key when clicking on the menu item, a dialog shows up first where you can set options for the unified diff. These options include the ability to ignore changes in line endings and whitespaces.(按住shift可以进行非空格和结尾字符比较)

与前一版本比较Compare with previous revision

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

与前一版本比较并追溯Compare and blame with previous revision

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

保存版本至... Save revision to...

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

打开 / 打开方式... Open / Open with...

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

追溯... Blame...

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

浏览版本库Browse repository

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

从版本创建分支/标记Create branch/tag from revision

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

更新项目至版本Update item to revision

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

复原到此版本Revert to this revision

恢复到某个以前的版本。如果你做了多处修改,然后决定要返回到版本 N,你就可以使用这个命令。恢复的修改位于你的工作副本,在你提交之前,并不会影响版本库。注意,这将会丢弃从那个版本以来的所有修改,使用选中的版本来替换文件/文件夹。如果你的工作副本处于未修改的状态,在执行此操作后,工作副本将会显示为已修改。如果你已经进行了本地修改,这个命令将会把撤销的改变合并至你的工作副本中。内部的动作是 Subversion 对选中版本之后的修改内容执行了反向合并,撤销这些先前提交产生的影响。如果在执行这个动作后你察觉到你需要撤销这次撤销并且让工作副本返回到先前没有修改的状态,你应该在 Windows 资源管理器中使用 TortoiseSVN → SVN 还原, 这个命令将会丢弃本次撤销动作带来的修改。如果你只是想看看某个文件或者文件夹在先前的版本是什么样子,使用 更新至版本 或 保存版本为... 功能替代此操作。

复原此版本作出的修改Revert changes from this revision

还原选中版本所做的修改。还原的内容只在你的工作副本中,所以此操作完全不会影响版本库!要注意的是,这个操作仅仅还原该版本中的修改。不是将整个文件替换成选中的那个版本。它对于已经做过其它无关修改的还原早期修改非常有用。如果你的工作副本处于未修改的状态,在执行此操作后,工作副本将会显示为已修改。如果你已经进行了本地修改,这个命令将会把撤销的改变合并至你的工作副本中。内部的动作是 Subversion 对这个版本的修改内容执行了反向合并,撤销先前提交产生的影响。你可以使用上文复原到此版本中描述的撤销这次撤销。

合并版本到... Merge revision to...

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

检出... Checkout...

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

导出... Export...

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

编辑作者 / 日志信息Edit author / log message

编辑之前提交时的日志信息或是作者。

显示版本属性Show revision properties

查看和编辑任何版本属性,不仅仅是日志信息和作者。

复制到剪贴板Copy to clipboard

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

查找日志信息... Search log messages...

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

Create code collaborator(合作者) review...

This menu is shown only if the SmartBear code collaborator tool is installed. When invoked for the first time, a dialog is shown prompting the user to enter user credentials for both code collaborator and SVN. Once the settings are stored, the settings dialog is no longer shown when the menu is invoked, unless the user holds Ctrl while executing the menu item. The configuration and the chosen revision(s) are used to invoke the code collaborator graphical user interface client, which creates a new review with the selected revisions.

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

比较版本差异Compare revisions

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

如果你是针对文件夹选中这个选项,则会弹出一个对话框列出修改过的文件,提供了更多的差异比较选项。

追溯版本Blame revisions

追溯两个版本,并使用可视化差异工具显示差异。

以标准差异文件显示修改Show differences as unified diff

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

复制到剪贴板Copy to clipboard

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

查找日志信息... Search log messages...

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

如果你用 Ctrl 或 Shift 组合键选择了两个或多个版本,If you select two or more revisions (using the usual Ctrl or Shift modifiers)右键菜单将有一个选项,可以让你还原这些选中的版本中的修改。这是一次性还原一组版本中修改的最简方法。

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

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

The bottom pane of the Log dialog also has a context menu that allows you to

显示改变Show changes

显示选中的文件在选中的版本所做的更改。

追溯改变Blame changes

追溯选中文件的选中版本与前一个版本,使用可视化差异工具显示差异。

以标准差异格式显示改变Show as unified diff

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

打开 / 打开方式... Open / Open with...

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

追溯... Blame...

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

复原此版本作出的修改Revert changes from this revision

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

显示属性Show properties

查看选中项的Subversion属性。

显示日志Show log

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

取得合并日志Get merge logs

显示被选中的单个文件的版本日志,包括合并修改。

保存版本至... Save revision to...

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

导出... Export...

Export the selected items in this revision to a folder, preserving the file hierarchy.

When multiple files are selected in the bottom pane of the Log dialog, the context menu changes to the following:(如果你选择了多个文件)

保存版本至... Save revision to...

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

Show multiple changes...多重变化显示

Show changes made in the selected revision for the selected files. Note that the show changes functionality is invoked multiple times, which may bring up multiple copies of your selected diff tool, or just add a new comparison tab in your diff tool. If you have selected more than 15 files, you will be prompted to confirm the action.(超过15个文件,会让你确认,否则都用比较工具打开)

打开多个本地项目... Open multiple local...

This will open local working copy files that correspond to your selected files using the application that is registered for the extension. [The behavior is the one you would get double-clicking the working-copy file(s) in Windows explorer]. Depending on how your file extension is associated to an application and the capabilities of the application, this may be a slow operation. In the worst case, new instances of the application may be launched by Windows for each file that was selected. (用默认关联的程序打开本地文件)

If you hold Ctrl while invoking this command, the working copy files are always loaded into Visual Studio. This only works when the following conditions are met: Visual Studio must be running in the same user context while having the same process integrity level [running as admin or not] as TortoiseProc.exe. It may be desirable to have the solution containing the changed files loaded, although this is not strictly necessary. Only files that exist on disk with extensions [.cpp, .h, .cs, .rc, .resx, .xaml, .js, .html, .htm, .asp, .aspx, .php, .css and .xml] will be loaded. A maximum of 100 files can be loaded into Visual Studio at one time, and the files are always loaded as new tabs into the currently open instance of Visual Studio. The benefit of reviewing code changes in Visual Studio lies in the fact that you can then use the built-in code navigation, reference finding, static code analysis and other tools built into Visual Studio. (按住Ctrl后可以用Visual Studio打开)

导出... Export...

Export the selected files/folder at the selected revision. This brings up a dialog for you to confirm the URL and revision, and select a location for the export.

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

Subversion 使用版本号代表 2 种不同的东西。版本通常表示版本库在某一个时间点的状态,但它也可以表示创建该版本时的更改集合,例如 "在 r1234 完成" 表示在 r1234 提交的更改实现了 X 功能。为了避免混淆,我们使用两个不同的术语。

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

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

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

获取更多的日志信息

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

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

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

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

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

注意,Subversion当前是用复制/删除来实现重命名的,所以重命名一个文件或文件夹也会造成日志显示停止(如果选择了复制/重命名时停止)在该点。如果你要查看更多的日志信息,点击下100个(Next 100),以获取下100个日志信息。如果有需要你可以多次重复这个操作。这个按钮旁边的是一个多功能按钮,它可以记住上一次你要它进行的操作。点击它上面的箭头,可以看到更多的选项。

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

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

当日志对话框显示后有其他人进行了提交的情况下,可以单击 F5 键来刷新最新的版本

单击 Ctrl-F5 键来刷新日志缓存

当前工作副本的版本

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

当你显示文件夹的日志时,高亮的版本是此文件夹中的最高版本,这就需要遍历工作副本。遍历操作在

单独的进程中进行,因此不会使显示日志有延迟,但是这样的结果就是高亮也许不会立刻显示出来。

合并跟踪特性

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

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

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

修改日志消息和作者

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

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

Subversion lets you change revision properties any time you want. But since such changes can't be undone (those changes are not versioned) this feature is disabled by default. To make this work, you must set up a pre-revprop-change hook.

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

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

Since TortoiseSVN keeps a cache of all the log information, edits made for author and log messages will only show up on your local installation. Other users using TortoiseSVN will still see the cached (old) authors and log messages until they refresh the log cache.

过滤日志信息

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

单击查找图标可以选择在哪些信息中查找,并选择 正则表达式 模式。正常情况下你可能只需要进行简单的子字符串查找,但如果你需要更有弹性的查找条件,就可以使用正则表达式。如果将鼠标在文本框上停留一会,就会出现一个工具提示条显示一些如何使用正则表达式功能和子字符串功能的使用帮助。过滤器检查字符串是否与日志内容匹配,并且只有 匹配 过滤字符串的条目才会显示。

Simple sub-string search works in a manner similar to a search engine. Strings to search for are separated by spaces, and all strings must match. You can use a leading - to specify that a particular sub-string is not found (invert matching for that term), and you can use! at the start of the expression to invert matching for the entire expression. You can use a leading + to specify that a sub-string should be included, even if previously excluded with a -. Note that the order of inclusion/exclusion is significant here. You can use quote marks to surround a string which must contain spaces, and if you want to search for aliteral quotation mark you can use two quotation marks together as a self-escaping sequence. Note that the backslash character is not used as an escape character and has no special significance in simple sub-string searches. Examples will make this easier:

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

在底部的面板选中 仅显示影响的路径 复选框可以过滤路径名称。影响的路径就是那些用来显示日志的路径。如果是获取文件夹的日志,就是指文件夹中的或者以下的任何内容。对于文件,就是指该文件。正常情况下,路径列表会显示受本次提交影响的其它路径,但是是灰色的。如果选中该复选框,这些路径就会被隐藏。

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

在版本库浏览器中没有日志格式化(Repository Browser)

Because the formatting depends upon accessing Subversion properties, you will only see the results when using a checked out working copy. Fetching properties remotely is a slow operation, so you will not see this feature in action from the repo browser.

统计信息

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

统计页

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

作者提交次数统计页

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

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

离线方式

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

这里你有三个选择:

立即离线

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

永久离线

保持离线方式,直到特别要求进行版本库检查。

取消

如果你不想使用失效的数据来继续操作,就取消吧。选中设为默认值复选框使用你本次的选项作为以后的选择,避免再次显示此对话框。你可以通过TortoiseSVN → 设置修改(或删除)此默认值。

刷新视图

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

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

查看差异

在项目开发中,有一个很常用的要求就是查看更改。可能是你要求查看同一文件的两个版本之间的差异,或者是查看两个独立的文件的差异。TortoiseSVN 自带了一个工具叫 TortoiseMerge 用来查看文本文件的差异。也有一个叫 TortoiseIDiff 的工具来查看图像文件的差异。当然,你可以根据你自己的

喜好来选择比较差异的工具。

文件差异

本地修改(Local changes)

如果你想看到你的本地副本有哪些更加,只用在资源管理器中右键菜单下选TortoiseSVN → 比较差异。(TortoiseSVN → Diff.)

与另外一个分支/标签之间的差异Difference to another branch/tag

如果你想查看主干程序(假如你在分支上开发)有哪些修改或者是某一分支(假如你在主干上开发)有哪些修改,你可以使用右键菜单。在你点击文件的同时按住Shift键,然后选择TortoiseSVN → URL比较(Difference to another branch/tag)。在弹出的对话框中,将特别显示将与你本地版本做比较的版本的URL地址。

你还可以使用版本库浏览器,选择两个目录树比较,也许是两个标记,或者是分支/标记和最新版本(Compare revisions)。右键菜单允许你使用比较版本来比较它们。

与历史版本的比较差异Difference from a previous revision

如果你想查看某一特定版本与本地副本之间的差异,使用显示日志对话框,选择要比较的版本,然后选择在右键菜单中选与本地副本比较差异(Compare with working copy)

如果你想查看上一次提交的版本和你的工作副本之间的差异,假设你的工作副本没有被修改,只要用右键单击文件。然后选择 TortoiseSVN → 与前一版本比较(TortoiseSVN → Diff with previous version)。这样将会对上一次提交时间(记录在你的工作副本中)之前的版本和工作基础版本进行差异比较。它将会显示工作副本中此文件变成当前状态的那一次修改。它不会显示比工作副本更新的修改。

两个历史版本的比较Difference between two previous revisions

如果你要查看任意已提交的两个历史版本之间的差异,在版本日志对话框中选择你要比较的两个版本(一般使用 Ctrl-更改),然后在右键菜单中选比较版本差异

如果你在文件夹的版本日志中这样做,就会出现一个比较版本对话框,显示此文件夹的文件修改列表。

提交所有修改All changes made in a commit

如果你要在一个视窗中查看某一版本的所有更改,你可以使用统一显示所有比较 (GNU 片段整理)。它将显示所有修改中的部分内容。它很难显示一个全面清晰的比较,但是会将所有更改都集中显示出来。在版本日志对话框中选择某一版本,然后在右键菜单中选择统一显示所有比较。(Show Differences as Unified-Diff)

文件差异Difference between files

如果你要查看两个不同文件之间的差异,你可以直接在资源管理器中选择这两个文件(一般使用Ctrl-modifier),然后右键菜单中选TortoiseSVN → 比较差异。(TortoiseSVN → Diff.)

If the files to compare are not located in the same folder(如果比较的两个文件不在同一个文件夹,分次选择), use the command TortoiseSVN→ Diff later (TortoiseSVN → Diff later选择第一个文件)to mark the first file for diffing, then browse to the second file and use TortoiseSVN → Diff with "path/of/marked/file". (TortoiseSVN → Diff with "path/of/marked/file".选择第二个)To remove the marked file, use the command TortoiseSVN → Diff later again, but hold down the Ctrl-modifier while clicking on it.(按住Ctrl同时按下TortoiseSVN → Diff later取消选择)

WC文件/文件夹与URL之间的比较差异Difference between WC file/folder and a URL

如果你要查看你本地副本中的某个文件与任意 Subversion 版本库中的某个文件之间的差异,你可以之间在资源管理器中操作,选中文件然后按下 Shift 键,同时右键单击显示右键菜单。选中TortoiseSVN → 与 URL (TortoiseSVN → Diff with URL)比较。你可以对工作副本文件夹做相同的操作。TortoiseMerge 通过与显示补丁文件相同的方法显示文件夹差异 - 你可以通过一个已修改文件列表分别查看某个文件。

追溯信息之间的比较差异Difference with blame information

如果你要查看的不仅是比较差异而且包括修改该版本的作者,版本号和日期,你可以在版本日志对话框中综合比较差异和追溯信息。

比较文件夹差异Difference between folders

TortoiseSVN 自带的内置工具不支持查看多级目录之间的差异,但你可以使用支持该功能的外置工具来替代。

如果你已经配置了第三方的比较工具,你可以在选择比较差异命令的时候按下 Shift 键来选择替代工具。

转载于:https://www.cnblogs.com/Chary/p/No000094.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值