2024年4月23日发(作者:)

TortoiseSVN客户端常用命令详解

TortoiseSVN客户端常用命令详解

1、Checkout

首先要Checkout服务器端的Repository,

所谓的Checkout就是指获得服务器端指定的Repository存储的所有文件。

Checkout的具体方式是:

在客户端新建一个空目录,比如:F:Project1 (确保是空的)

在该目录上单击右键,在弹出式菜单中选中,

之后按要求录入内容:

孙管理 第1 页

TortoiseSVN客户端常用命令详解

然后点OK,会弹出一个认证对话框,

输入用户名和密码。

点OK后就完成了对Repository的Checkout。

检出后,所有检出文件上都打着绿色对勾:

命令方式检出

1:在DOS命令中输入需要检出的目录:

192.168.1.210:8081/svn/svnproject/Knowledge

孙管理 第2 页

TortoiseSVN客户端常用命令详解

2:其中,

意思是,检出文档是放在D盘的根目录下,是检出文档的存放位置,如下图:

2、update

获取版本库中最新版本,具体的方法是:在WC目录上单击右键,SVN Update。

孙管理 第3 页

TortoiseSVN客户端常用命令详解

这时WC中的文件就是最新的版本了。

3、commit

commit功能就是将你本地的文件修改记录上传到服务器上面,可以理解为上传。

只会上传原先checkout然后又被修改了的文件,假如你新加入了某些文件,需要右

键点击文件选择Add,然后文件上面会出现一个加号,在下次commit的时候才能选到该

文件。

commit页面:

孙管理 第4 页

TortoiseSVN客户端常用命令详解

注意:commit的时候,最好填写Log信息,

Log内容包括:修改了哪些东西及为什么做这些修改(what+why)

强制必须录入log: property 中设置录入log最小长度,此时commit必须录入log,

否则不允许提交.

设置录入log最小长度页面:

孙管理 第5 页

TortoiseSVN客户端常用命令详解

4、add

将要添加的文件或者目录拷贝到WC下,

然后在该文件或目录上单击右键,TortoiseSVN->Add,点OK。

如果添加了不止一个文件或目录,

则鼠标不要在WC中点中任何文件,

然后单击右键,TortoiseSVN->Add,

孙管理 第6 页

TortoiseSVN客户端常用命令详解

就可以添加多个文件或目录。

这时文件的状态图标会发生如下变化:

Add命令只是告诉本地的WC将该文件纳入版本管理,

并没有将这个改变提交到服务器端,

在F:Project1下单击右键,,

将你所做的修改提交到Repository。

5、modify

用文本编辑器或IDE对文件修改后,

文件的状态图标会变化,

孙管理 第7 页

TortoiseSVN客户端常用命令详解

然后单击右键, 即可提交修改。

6、revert

(1)、放弃未提交的修改,

单击右键,TortoiseSVN->Revert,

本地的WC中的文件和目录会恢复到修改前的状态。

(2)、回复到之前某个revision状态:

a、 在本地WC中单击右键,TortoiseSVN->Update ,

孙管理 第8 页

TortoiseSVN客户端常用命令详解

然后输入你想要回复到的Revision号

点OK按钮。此时仅仅是WC中回复到特定版本,对Repository没有任何影响。

孙管理 第9 页

TortoiseSVN客户端常用命令详解

b、把Repository回复到某个revision状态方法:

方法一:

先执行Update命令将Working Copy更新到最新的Revision,

然后在Working Copy中单击右键,

TortoiseSVN->Show Log,

弹出的Log Messages窗口中会显示该Repository的所有Revision,

选中最新的Revision,之后按住Shift键,

再单击你想回复到的Revision+1的那个Revision

(比如Repository的最新Revision是79,

你想将Repository的状态回复到Revision60,

那么就选中Revision70,再按住Shift键,

选中Revision61,

就是说选中Revision61到Revision79之间的所有Revision)。

孙管理 第10 页

TortoiseSVN客户端常用命令详解

然后在选中的Revision上单击右键,

选中“Revert changes from these revision”。

再点Yes按钮,就可以将WC的状态回复到目标Revision60。

注意:此时只是WC回复到目标Revision,之后应该用Commit提交修改,

这样Repository最新状态就与WC的状态一致,都为 Revision60。

方法二:

采取大版本号向小版本号merge的方式,进行回滚

保证我们拿到的是最新代码,TortoiseSVN右键merge,如果我们最新版本为79,

孙管理 第11 页

TortoiseSVN客户端常用命令详解

要回滚到60,如下图,“From”的URL和“to”的URL均了录入要回复的文件在版本库

的存放地址

点“merge”,然后commit即可。

7、delete

删除文件时,选中要删除的文件或目录,

单击右键,TortoiseSVN->Delete

孙管理 第12 页

TortoiseSVN客户端常用命令详解

然后提交修改。

注意千万不要用windows自己的“删除”或者“Delete”键来删除文件,否则将无

法提交你的修改。

这一点对目录的删除来说尤为重要。 因为每个目录里有个 .svn隐藏目录 ,存放目录

下文件的信息,使用操作系统命令delete/move时, .svn还指向原来的位置,所作操作

不受SVN控制。

孙管理 第13 页

TortoiseSVN客户端常用命令详解

8、move

移动方法:

(1)、选择你要移动的文件或目录

(2)、拖拽(right-drag)他们到新的工作副本下,

(3)、松开鼠标右键

(4)、在弹出菜单选择上下文菜单 → SVN 移动文件。

原理同上。

9、Branche/Tag

操作方法:

孙管理 第14 页

TortoiseSVN客户端常用命令详解

创建分支非常简单,只需在需要创建分支的工作目录上,使用TortoiseSVN →

Branch/Tag命令,在 "To URL" 项指定待创建的分支 url 即可

实现本质:

subversion对分支和标签是通过复制一份最新的版本库的快照来实现的。

一般情况下,tag,是用来做一个milestone的,不管是不是release,都是一个可用

的版本。这里应该是只读的,更多的是一个显示用的,给人一个可读(readable)的标记;

branch,是用来做并行开发的,这里的并行是指和trunk进行比较。

分支与标签的区别:

孙管理 第15 页

TortoiseSVN客户端常用命令详解

在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限

上和一般的目录没有区别。至于何时用tag,何时用branch,完全由人主观的根据规范和

需要来选择,而不是强制的(比如cvs),一个不去做任何的修改的分支就是版本库某一时

刻的一个快照,相当于为某一个版本做了一个标签

Branch和Tag都是拷贝指向原始文件的链接,当你对拷贝做修改时,记录为相对原

始文件的修改,称为延迟拷贝,效率高且几乎不占用空间。

Tag:版本号是个好东西,但是我们更倾向于记住像第二预览发布版这样的名字,而不

是V01这样的数字,标签是用来做这件事情的。版本控制系统可以让你给某一个时刻的一

组文件或者一些目录或者整个项目分配一个名字。如果你给某几个文件分配标签“第二发

布预览版”,以后就能使用这个标签签出它们。

标签是一种很好地跟中项目代码开发过程中发生的重要事件的方式。

分支合并:

使用TortoiseSVN → Merge命令,在“ From:(start URL and revision of the

range to merge) ”中选择希望合并的目录 ( 如: trunk) ,并指定希望合并的开始

revision 编号,在“ To:(end URL and revision of the range to merge) ”中选择结束

revision 编号。

孙管理 第16 页

TortoiseSVN客户端常用命令详解

然后点击

“ merge ”完成合并操作,剩下的工作就是编辑冲突了。当然运气好的话是不需要这个过

程滴。 值得注意的是,“ From: ”和“ To: ”中的 URL 通常是相同的,切记不要与创建

分支时的含义混淆

10、get lock/release lock

选择工作副本中你想要获取锁定的文件,然后选择命令TortoiseSVN ---> Get lock…

孙管理 第17 页

TortoiseSVN客户端常用命令详解

出现一个对话框,允许你输入注释,这样别人知道你为什么锁定这个文件。注释是可

选的,

并且只用于基于Subversion 的库。选择需要锁定的文件在复选框打勾,点击“确定”

按钮

锁定选择的文件:

孙管理 第18 页

TortoiseSVN客户端常用命令详解

出现一个对话框,输入正确的用户名和密码即可向版本库提交你想锁定文件的信息。

锁定文件成

功!返回信息!”Locked by admin”表示文件已被admin 用户锁

定;”alpay_”表示锁定文件的名称。点击”OK”按钮确定锁定文件成功。

孙管理 第19 页

TortoiseSVN客户端常用命令详解

释放锁定(取消锁定)

选择工作副本中你想要取消锁定的文件,然后选择命令TortoiseSVN ---> Release

lock…

孙管理 第20 页

TortoiseSVN客户端常用命令详解

之后操作同get lock。

当被锁定文件commit后,会自动解锁,无需再去解锁;如果commit后还需上锁,

则在commit时可选择:“keep lock”

孙管理 第21 页

TortoiseSVN客户端常用命令详解

强制锁定:设置对象文件svn:needs-lock这个属性,update后强制文件的属性为只

读,只有lock之后,才能对文件进行修改操作,commit-release lock之后,又自动变成

只读。

具体做法:

先将文件拷贝到WC中,然后在该文件上单击右键,

TortoiseSVN->Add,告诉Subversion要将该文件纳入版本控制,

接着在该文件上单击右键并选中属性,

孙管理 第22 页

TortoiseSVN客户端常用命令详解

在弹出的属性对话框中选中Edit键,在property name中如下图。

在下拉框中选中“svn:needs-lock”,

并在下面的文本框中填入“*”

(其实这里填什么都无所谓,只要文件有“svn:needs-lock”附加属性就行),

之后点Set按钮,“svn:needs-lock”附加属性就设置好了。

然后执行Commit命令提交修改。

这时当其他人执行Update时,

孙管理 第23 页

TortoiseSVN客户端常用命令详解

就会添加到他们的WC中,

并且文件的附加属性也会随文件一起被得到。

可以看到此时的图标就是灰色的,

文件的Windows属性也是只读的

11、clean up

SVN 本地更新时,由于一些操作中断更新,如磁盘空间不够,用户取消,

可能会造成本地文件被锁定的情况。一般出现这种情况的解决方法:

(1)、可以使用SVN clean up来清除锁定。

(2)、如果不是本目录锁定,系统提示上一层目录锁定,需要到上一层或者根目录中清

除。

(3).如果在根目录下都无法clean的话,一般采取的方法是另外找一个目录重新check

out。但有时SVN目录下可能有一些自己本地修改的文件,还未提交到SVN服务器,这

时重新check out需要注意本地文件的备份,并且不要强制覆盖服务器上其它人修改的内

容。

(4)、如果觉得第3种很麻烦,可以考虑这样的方法。其实SVN加锁会在.SVN(隐藏

文件)中生成一个名字叫lock的文件(无后缀),查找所有的手工删除。然后再尝试更新,

孙管理 第24 页

TortoiseSVN客户端常用命令详解

系统可能会提示某个.base文件无法访问。找到它,把相关的文件或其所在的目录删除,

重新update。工作量就小多了。

12、export

集成测试或项目上线需要版本时,使用export而不用checkout,export 得到干净

的目录与文件,不带版本控制因素。

13、Check for modifications

同服务器上的项目版本进行比较,并可做相应的修改。

孙管理 第25 页

TortoiseSVN客户端常用命令详解

孙管理 第26 页

TortoiseSVN客户端常用命令详解

14、Show log

查看版本日志及不同版本间相互比较

孙管理 第27 页

TortoiseSVN客户端常用命令详解

孙管理 第28 页

TortoiseSVN客户端常用命令详解

孙管理 第29 页

TortoiseSVN客户端常用命令详解

15、Revision Graph

版本示意图

孙管理 第30 页

TortoiseSVN客户端常用命令详解

孙管理 第31 页

TortoiseSVN客户端常用命令详解

16、Repo-Browser

孙管理 第32 页

TortoiseSVN客户端常用命令详解

查看当前版本库,这是TortoiseSVN查看版本库的入口,通过这个菜单项,我们就可

以进入配置库的资源管理器,然后就可以对配置库的文件夹进行各种管理,相当于我们打

开我的电脑进行文件管理一样

17、Rename

SVN支持文件改名,点击Rename,弹出文件名称输入框,输入新的文件名称,点击确定,

再把修改提交,即可完成文件改名。

孙管理 第33 页

TortoiseSVN客户端常用命令详解

18、switch与relocate

版本库转移,当我们版本库发生转移的时候就需要用到这个功能。例如我原先的版本

库是建在U盘上的,现在转移到(复制整个配置库文件夹)开发服务器上,使用https代

替文件系统的访问。因此就需要将原来的工作拷贝的目标版本库重新定位到开发服务器上。

注意:relocate与switch的区别:

(1)、如果WC反应相同的版本库目录,但是版本库本身位置改变了,使用relocate;

(2)、如果WC需要反应一个版本库的新目录,素要switch。

19、switch与svn update比较:

孙管理 第34 页

TortoiseSVN客户端常用命令详解

svn switch和svn update的输出很像,switch命令只是update命令的一个超集。

当你运行svn update时,会告诉版本库比较两个目录树,版本库这样做,并且返回

给客户区别的描述,svn switch和svn update两个命令唯一区别就是update会一直比

较同一路径。

也就是了,如果你的工作拷贝是/calc/trunk的一个镜像,当运行svn update时会自

动地比较你的工作拷贝的/calc/trunk与HEAD版本的/calc/trunk。如果你使用svn switch

跳转工作拷贝到分支,则会比较你的工作拷贝的/calc/trunk与相应分支目录的HEAD版

本。

换句话说,一个更新通过时间移动你的工作拷贝,一个转换通过时间和空间移动工作

拷贝。

因为svn switch是svn update的一个变种,具有相同的行为,当新的数据到达时,

任何工作拷贝的已经完成的本地修改会被保存,这里允许你作各种聪明的把戏

20、diff:

(下面是针对同一个文件而言)

原本错误地理解了 diff 的意思是比较本地的文件与服务器的相应文件有什么不同,但

实际意思并非这样。更准确地说这条语句的意思是比较一个文件中你修改过的部分与服务

器的相应文件相应部分有什么不同,对于那些没有修改过的地方(同一文件中)不同也不

会比较,当然可以先 up 一下再 svn diff 这样就保证了本地文件与服务器的相应文件的

孙管理 第35 页

TortoiseSVN客户端常用命令详解

所有不同的地方全都显示出来了,当然冲突情况除外.

21、dry run

合并前看看结果会是什么样的.一个简单的办法就是运行dry run先看看,并不真实的

将结果写入到工作副本中.它只是显示在合并过程中输出的执行结果状态码.比较'高级'的预

言合并,当运行svn diff可能会给出太多的详细日志.

22、create/apply patch

(1)、使用create patch可以生成一个或者多个修改过的文件和当前版本差异的patch

(支持目录树)

通常情况下,create patch将修改保存为.patch或.diff文件

可以将.patch或.diff文件的内容复制出来,发给需要审查的人

.patch或.diff文件中记录了发生这个patch的版本号以及具体修改的内容

针对某个文件或某几个文件的若干种修改,可以生成多个.patch或.diff文件

(2)、apply patch

可以将.patch或.diff文件应用到对应版本的项目,就像打补丁一样

同一个项目/文件夹下,可以选择应用需要的patch

孙管理 第36 页

TortoiseSVN客户端常用命令详解

通常来说,应用一个patch时文件版本和生成这个patch时文件的版本是一致的;如

果不一致,也可以强制应用,svn会自动进行diff(这时候需要手动合并)

linux下,可以使用系统的patch命令来应用patch,eg: patch -p0 <

(3)、使用

暂时不需要提交或不允许提交的修改,可以选择create patch来保存修改的内容

选择create patch来保存修改的内容并且提交patch,通过审查后,(在服务器端)应

用patch

当一个功能有多种解决方案时,可以生成多个patch,(提交后)分别经过测试,再决

定应用哪个patch

多个功能分别需要改同一个文件的不同地方(即没有同一行),可以做成多个patch,

应用patch的顺序没有要求(在linux下应用也一样成功,只是会生成多个.orig文件)

多个连续性的功能,他们修改的文件都与一个base作patch,例:p1在v1的基础

上开发v2,生成v2和v1之间的patch1;p2在v2的基础上开发v3,生成v3和v1之

间的patch2,这样只要应用patch2也就应用了patch1。

(4)、带来的问题

一个较早的patch,在经过多轮提交后,如果想再要应用,需要严格的diff

孙管理 第37 页

TortoiseSVN客户端常用命令详解

如果两个patch分别改了同一行代码,应用第一个patch后要再应用第二个patch时,

仍然需要diff。如果在linux下,会产生冲突,生成.orig和.rej两个文件(此时仍然需要

手动进行比较合并)

第3部分提到的连续性,要准确的预见到,比较困难

第3部分提到的多个连续的功能,后做的功能的某个文件更新了先做的功能的内容,

但先做的功能可能还涉及到其他文件,容易造成漏更新文件的情况

23、subversion的版本控制模型

当你用subversion进行版本控制时,

Subversion会记录你对Repository进行的每一次修改(包括添加,修改,删除等等),

每修改一次Repository都会产生一个新的Revision(修订版本号),

不同的Revision代表了不同时刻Repository的状态,

因此我们可以用这个Revision回朔任意时刻Repository的状态,

就像时间机器一样,也就是说某一Revision

就是Repository在某一时刻的一个“快照”。

注意:Revision不是针对某一个文件或者目录,

孙管理 第38 页

TortoiseSVN客户端常用命令详解

而是针对整个Repository而言的。

每修改一次Repository,Revision 都会增加1。

Subversion的版本控制模型是一种叫做Copy-Modify-Merge

(拷贝-修改-合并)的模型。

考虑这种情况:

张三和李四是公司同一个部门的同事,

他们共同维护一个文本文件,

并且对该文件进行版本控制,

因此他们把这个文件放到一个Repository上共同维护该文件。

周一上午9点,张三和李四同时想对文件进行修改,

于是他们同时从Repository上取得该文件的最新版本(Revision 10),

然后进行修改。过了三分钟,张三首先完成了修改,

他在该文件的第五行修改了一个单词的拼写(将Typo改为Type),

孙管理 第39 页

TortoiseSVN客户端常用命令详解

于是张三对修改后的文件执行Commit命令,

将修改提交到服务器端的Repository中。

这时Repository的Revision变为11。

六分钟过后,李四也完成了他的修改,

他修改了该文件第十行上的一个单词拼写(将He改为She),

于是他也对修改后的文件执行Commit命令,

这时Subversion 在提交修改时会发现,

李四修改的文件是Revision10的文件,

而不是最新的Revision 11的文件。

于是,Subversion 提示李四在提交修改前,

应该先将Working Copy更新到最新版本,

李四执行Update命令将Working Copy更新到Revision 11,

这时Subversion会提示已经完成合并,

孙管理 第40 页

TortoiseSVN客户端常用命令详解

李四的文件的第五行的“Typo”已经变为了“Type”,

第十行还是“She”,就是说Subversion已经将张三的修改“合并”到李四的

文件中了。

之后,李四再执行Commit命令,就能将他对第十行的修改(将He改为She)

提交到服务器端的Repository中了(生成Revision 12)。

但是这种合并在某些情况下会变得复杂一些,

比如:李四对文件的修改并不是第十行,

而是与张三同样修改第五行的单词,

李四将“Typo”改为“Typr”,并且提交修改,

这时Subversion会提示李四在提交修改前,

应该先将Working Copy更新到最新版本,

李四执行Update命令将Working Copy更新到Revision 11,

这时Subversion将Revision11的文件与

李四修改的文件进行合并时发现李四修改的同样是第五行,

孙管理 第41 页

TortoiseSVN客户端常用命令详解

于是Subversion就无法判断是李四的修改(“Tpyr”)

正确还是张三的修改(“Type”)正确,

因为他们都是在Revision10的基础上作的修改。

这种情况叫做Conflict(冲突),

文件的图标会变成一个黄色三角。

这时,只能依靠李四自己去判断到底第三行应该修改为“Typr”还是“Type”。

当李四确定修改之后,在文件上单击右键,TortoiseSVN->Resolved

告诉Subversion已经解决了Conflict。

这时再执行Commit命令就能提交修改(生成Revision 12)。

Subversion 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本。

24、“.svn”目录

在客户端Working Copy的每一层目录中都会有一个“.svn”目录,

该目录是Subversion进行管理用的目录。

孙管理 第42 页

TortoiseSVN客户端常用命令详解

不要手动修改其中的文件。

该目录存储了Working Copy的一个副本

实际存储副本的地方是F:t-base目录

比如:F:Project1是一个Working Copy,

该目录下有两个文件和还有一个子目录ccc,

子目录ccc中还有一个文件。

“.svn”目录中存储的是你最近一次执行完Update或者Commit命令之后当前目录

中文件的副本,

比如:F:t-base中存储的和

是最近一次执行完Update或者Commit命令之后F:project1下的和的

拷贝。

也就是说你所作的修改都是基于“.svn”目录存储的那些文件。

这种机制可以让我们在不连接网络的情况下,

将Working Copy中的文件恢复到修改之前的状态。

孙管理 第43 页

TortoiseSVN客户端常用命令详解

Subversion的Revert命令就是利用了这种机制来实现的。

比如你修改了F:文件,

这时你又改变了主意想放弃对该文件的修改,

你可以单击右键,TortoiseSVN->Revert,

修改过的F:文件

就会被F:t-base中文件的副本所替代,

使得恢复到修改前的状态。

Working Copy中每一个子目录下都会有一个“.svn”目录,

并不是只有最上层目录才有“.svn”目录。

所以,F:project1ccc下也有一个“.svn”目录,

该目录存储的是F:的副本

(的副本位于F:t-base)。

也就是说每个“.svn”目录只存储同级目录中的“文件”副本,

孙管理 第44 页

TortoiseSVN客户端常用命令详解

而不存储“目录”副本。“.svn”目录存有许多重要的内容,

所以前面说在删除文件或目录时,

必须用TortoiseSVN->Delete,

而不能用windows自带的”删除”或者“Delete”键来删除文件或目录,尤其是对

于目录的删除。

25、混合版本

Subversion的Working Copy被设计成一种能够包含不同版本的文件共存的形式。

比如F:Project1是一个Working Copy,

该目录下有两个文件和。

执行Update命令,将Working Copy更新到最新版本(Revision 24)。

这时,和的Revision都是24

(其实对于单个文件来说并不存在Revision,

Revision是对于整个Repository而言的,

这里所指的是Repository的Revision24所存储的和,

孙管理 第45 页

TortoiseSVN客户端常用命令详解

但为了方便而采用这种描述方式,请注意,下同)。

之后,你的同事修改了,并且提交了修改,

这时Repository的Revision就变成25了。

注意,这时你没有再次执行Update,

因此你的Working Copy的Revision还是24。

这时你修改了文件,并提交修改。

因为Revision25并没有对文件进行修改,

因此你对文件的修改是基于文件最新的版本,

所以不会出现Conflict。

当你提交的修改后,产生Revision26。

这时你会发现你的Working Copy中的文件并不是Revision25中的文件,

它还是Revision24的文件,而你的文件是Revision26的文件。

也就是说当你Commit时,你的Working Copy中只有你提交的那些文件是最新版本,

孙管理 第46 页

TortoiseSVN客户端常用命令详解

而其他没有修改的文件并不会更新为最新版本。

这样就造成了你的Working Copy由不同的Revision文件所组成

(Revision24的文件和Revision26的文件)。

前面说过在提交修改前必须保证你是在文件的最新版本基础上修改,

如果在这种混合版本的情况下,

怎样才能知道当前Working Copy中的文件是否为最新版本?

在前面所说的“.svn”目录中有一个文件名为“entries”的文件,

该文件记录了当前Working Copy中的每一个文件的Revision,

因此当你Commit时,Subversion会从该文件中取得你提交文件的Revision,

再与Repository的最新Revision一比较就可以知道你修改的文件是否基于该文件的

最新版本。

26、文件的附加属性

在Subversion中,每个文件可以拥有一种叫做附加属性的东西。

附加属性描述了该文件所拥有的一些特性。

孙管理 第47 页

TortoiseSVN客户端常用命令详解

Subversion已经预定义了一些附加属性

(这里只是指Subversion已经定义了一些附加属性的“名称”,

并不是指已经将这些属性附加在文件上了,

比如默认情况下文本文件一开始不含任何属性,

直到人为的对该文件添加附加属性),

并且你可以对文件添加自定义的属性。

Subversion对待附加属性就像对待文件内容一样,

当修改了一个文件的附加属性(添加,改变,删除附加属性),

即使没有对文件的内容进行修改,

同样可以Commit该文件,就像更改了文件内容那样,

Repository也会生成新的Revision,

所以从某种意义上来说,

Subversion不区别对待文件的附加属性的修改和文件的内容的修改,

孙管理 第48 页

TortoiseSVN客户端常用命令详解

文件的附加属性可以看成是一种特殊的文件内容。

Subversion预定义了若干个附加属性,

这里只讨论“svn:needs-lock”属性,

因为它与我们上面的文件锁定会产生的一个问题有关。

其他的属性可以参考Subversion自带的帮助文档。

考虑这种情况,

张三和李四同时想对一个图片文件作修改,

张三在修改时先将该文件锁定,然后进行修改,

同时李四也开始对该文件进行修改,

但李四忘记了对非文本文件进行修改时应该先锁定该文件。

张三首先对该文件修改完毕,于是张三向服务器提交了他的修改。

之后,李四也完成了修改,当他提交修改时,

Subversion提示李四的文件版本不是最新的,

孙管理 第49 页

TortoiseSVN客户端常用命令详解

在Commit之前应先更新到最新版本,

由于图片文件无法合并,

这就意味着张三和李四之间必定有一个人的修改会作废。

应用“svn:needs-lock”属性可以避免这个问题。

当一个文件拥有“svn:needs-lock”属性时,

该文件在没有锁定时,文件的图标是灰色的,

表示该文件是一个只读文件(该文件的Windows只读属性的复选框为选中),

这个灰色的图标就会提醒想对该文件进行修改的人,

在修改该文件之前应该首先锁定该文件。

锁定该文件之后,文件的只读属性就会去掉了,

一旦释放掉锁,文件的图标又会变成灰色,

文件也会变成只读的了。

李四在这种情况下就会避免在没有锁定文件时对文件进行修改。

孙管理 第50 页

TortoiseSVN客户端常用命令详解

对非文本文件添加“svn:needs-lock”

属性应该在将该文件第一次添加到Repository时就设置,

当然,一个文件可以在任意时刻添加附加属性,

这样做是为了减少李四所遇到的那个问题发生的几率。

具体的方法是:

首先将文件拷贝到Working Copy中,

然后在该文件上单击右键,

TortoiseSVN->Add,告诉Subversion要将该文件纳入版本控制,

接着在该文件上单击右键并选中属性,

在弹出的属性对话框中选中Subversion页。

在下拉框中选中“svn:needs-lock”,

并在下面的文本框中填入“*”

(其实这里填什么都无所谓,只要文件有“svn:needs-lock”附加属性就行),

孙管理 第51 页

TortoiseSVN客户端常用命令详解

之后点Set按钮,“svn:needs-lock”附加属性就设置好了。

然后执行Commit命令提交修改。

这时当其他人执行Update时,

就会添加到他们的Working Copy中,

并且文件的附加属性也会随文件一起被得到。

可以看到此时的图标就是灰色的,

文件的Windows属性也是只读的。

27、svnlook author

Dos 命令输入:Svnlook author -r 538 E:svn svnproject会显示出某个版本的作

者:

孙管理 第52 页