svntortoise的简单介绍

本篇文章给大家谈谈svntortoise,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

SVN客户端--TortoiseSVN使用说明【转】

TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具。通过使用它,我们可以可视化的管理我们的版本库。不过由于它只是一历槐个客户端,所以它不能对版本库进行权限管理。

TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中,使用起来比较方便。

TortoiseSVN每个菜单项都表示什么意思

01、SVN Checkout(SVN取出)

点击SVN Checkout,弹出检出提示框,在URL of repository输入框中输入服务器仓库地址,在Checkout directory输入框中输入本地工作拷贝的路径,点击确定,即可检出服务器上的配置库。

02、SVN Update(SVN更新)

如果配置库在本地已有工作拷贝,则取得最新版本只是执行SVN Update即可,点击SVN Update,系统弹出更新提示框,点击确定,则把服务器是最新版本更新下来

03、Import(导入)

选择要提交到服务器的目录,右键选择TortoiseSVN----Import,系统弹出导入提示框,在URL of repository输入框中输入服务器仓库地址,在Import Message输入框中输入导入日志信息,点击确定,则文件导入到服务器仓库中。

04、Add(加入)

如果有多个文件及文件夹要提交到服务器,我们可以先把这些要提交的文件加入到提交列表中,要执行提交操作,一次性把所有文件提交,如图,可以选择要提交的文件,然后点击执行提交(SVN Commit),即可把所有文件一次性提交到服务器上

05、Resolving Conflicts(解决冲突)

有时你从档案库更新文件会有冲突。冲突产生于两人都修改文件的某一部分。解决冲突只能靠人而不是机器。当产生冲突时,你应该打开冲突的文件,查找以开始的行。冲突部分被标记:

filename

your changes

=======

code merged from repository

06、Check for Modifications(检查更新)

点击Check for Modifications,系统列表所以待更新的文件及文件夹的状态.

07、Revision Graph(版本分支图)

查看文件的分支,版本结肢纯友构,可以点击Revision Graph,系统以图形化形式显示版本分支.

08、Rename(改名)

SVN支持文件改名,点击Rename,弹出文件名称输入框,输入新的文件名称,点击确定,再把修改提交,即可完成文件改名

09、Delete(删除)

SVN支持文件删除,而且操作简单,方便,选择要删除的文件,点击Delete,再把删除操作提交到服务器

10、Moving(移动)

选择待移动的文件和文件夹;按住右键拖动right-drag文件(夹)到跟踪拷裤乎贝内的新地方;松开左键;在弹出菜单中选择move files in Subversion to here

11、Revert(还原)

还原操作,如刚才对文件做了删除操作,现在把它还原回来,点击删除后,再点击提交,会出现如上的提示框,点击删除后,再点击Revert,即已撤销删除操作,如果这时候点击提交,则系统弹出提示框:没有文件被修改或增加,不能提交

12、Branch/Tag(分支/标记)

当需要创建分支,点击Branch/Tag,在弹出的提示框中,输入分支文件名,输入日志信息,点击确定,分支创建成功,然后可查看文件的版本分支情况

13、Switch(切换)

文件创建分支后,你可以选择在主干工作,还是在分支工作,这时候你可以通过Switch来切换。

14、Merge(合并)

主干和分支的版本进行合并,在源和目的各输入文件的路径,版本号,点击确定。系统即对文件进行合并,如果存在冲突,请参考冲突解决。

15、Export(导出)

把整个工作拷贝导出到本地目录下,导出的文件将不带svn文件标志,文件及文件夹没有绿色的”√”符号标志。

16、Relocate(重新定位)

当服务器上的文件库目录已经改变,我们可以把工作拷贝重新定位,在To URL输入框中输入新的地址

17、Add to Ignore List(添加到忽略列表)

大多数项目会有一些文件(夹)不需要版本控制,如编译产生的*.obj, *.lst,等。每次送交,TortoiseSVN提示那些文件不需要控制,挺烦的。这时候可以把这些文件加入忽略列表。

18、SVN其它相关功能

客户端修改用户密码:

打开浏览器,在地址栏内输入 ,启动客户端修改用户密码的界面,输入正确的用户名,旧密码,新密码(注意密码的位数应该不小于6,尽量使用安全的密码),点击修改即可.

19、SVN Commit(版本提交)

把自己工作拷贝所做的修改提交到版本库中,这样别人在获取最新版本(Update)的时候就可以看到你的修改了。

20、Show log(显示日志)

显示当前文件(夹)的所有修改历史。SVN支持文件以及文件夹独立的版本追溯。

21、Repo-Browser(查看当前版本库)

查看当前版本库,这是TortoiseSVN查看版本库的入口,通过这个菜单项,我们就可以进入配置库的资源管理器,然后就可以对配置库的文件夹进行各种管理,相当于我们打开我的电脑进行文件管理一样。

22、Revision Graph(版本图形)

查看当前项目或文件的修订历史图示。如果项目比较大型的话,一般会建多个分支,并且多个里程碑(稳定版本发布),通过这里,我们就可以看到项目的全貌。

23、Resolved(解决冲突)

如果当前工作拷贝和版本库上的有冲突,不能自动合并到一起,那么当你提交修改的时候,tortoisesvn就会提示你存在冲突,这时候你就可以通过这个菜单项来解决冲突。冲突的解决有两种,一种是保留某一份拷贝,例如使用配置库覆盖当前工作拷贝,或者反过来。还有一种是手动解决冲突,对于文本文件,可以使用tortoiseSVN自带的工具,它会列出存在冲突的地方,然后你就可以和提交者讨论怎么解决这个冲突。同时它也对Word有很好的支持

24、Update to Revision(更新至版本)

从版本库中获取某一个历史版本。这个功能主要是方便查看历史版本用,而不是回滚版本。注意:获取下来之后,对这个文件不建议进行任何操作。如果你做了修改,那么当你提交的时候SVN会提示你,当前版本已失效(即不是最新版本),无法提交,需要先update一下。这样你所做的修改也就白费了。

25、Revert(回滚)

如果你对工作拷贝做了一些修改,但是你又不想要了,那么你可以使用这个选项把所做的修改撤销

26、Cleanup(清除状态)

如果当前工作拷贝有任何问题的话,可以使用这个选项进行修正。例如,有些文件原来是版本控制的,但是你没有通过tortoiseSVN就直接删除了,但是tortoiseSVN还是保留着原来的信息(每个文件夹下都有一个.svn的隐藏文件夹,存放着当前文件夹下所有文件夹的版本信息)所以这就会产生一些冲突。可以使用cleanup来清理一下。

27、GetLock/ReleaseLock(加锁/解锁)

如果你不想别人修改某个文件的话,那么你就可以把这个文件进行加锁,这样可以保证只有你对这个文件有修改权。除非你释放了锁,否则别人不可能提交任何修改到配置库中

28、Branch/tag(分支/标签)

Branch是分支的意思。例如当在设计一个东西的时候,不同的人有不同的实现,但是没有经过实践检验,谁也不想直接覆盖掉其他人的设计,所以可以引出不同的分支。将来如果需要,可以将这些分支进行合并。

tag是打标签的意思。通常当项目开发到一定程度,已经可以稳定运行的时候,可以对其打上一个标签,作为稳定版。将来可以方便的找到某个特定的版本(当然我们也可以使用版本号来查找,但是数字毕竟不方便)

SVN对于分支和标签都是采用类似Linux下硬链接的方式(同一个文件可以存在两个地方,删除一个不会影响另一个,所做修改会影响另一个),来管理文件的,而不是简单的复制一份文件的拷贝,所以不会有浪费存储空间的问题存在。

29、Export(导出)

这个功能是方便我们部署用。当我们需要发布一个稳定版本时,就可以使用这个功能将整个工程导出到某个文件夹,新的文件夹将不会包含任何版本信息了。

30、Relocate(版本库转移)

当我们版本库发生转移的时候就需要用到这个功能了。例如我原先的版本库是建在U盘上的,现在转移到(复制整个配置库文件夹)开发服务器上,使用https代替文件系统的访问。因此就需要将原来的工作拷贝的目标版本库重新定位到开发服务器上。

31、create patch(创建补丁)

创建补丁。如果管理员不想让任何人都随便提交修改,而是都要经过审核才能做出修改,那么其他人就可以通过创建补丁的方式,把修改信息(补丁文件)发送给管理员,管理员审核通过之后就可以使用apply patch提交这次修改了。

32、diff (比较修改部分)

如果你修改了一个文件,又不确定改了那些地方,这时你可以在相应文件上点右键,选择diff查看,与服务器上最新版的差异

TortoiseSVN常见的错误信息与解决方法

1、无法复制/移动‘XXX.svn-base‘到’XXX.tmp‘:系统找不到指定文件。

这个错误信息通常在你更新工作拷贝时出现,可能的原因有两个:

版本库中有两个文件的名字只是大小写不同,这在Windows下是不允许签出的,因为Windows的文件系统是大小写不敏感的。很可能其中一个文件是误添加的,所以你要找出是哪一个,然后删除它,以确保不会把更改提交到错误的文件。

某个文件的文件名是非法的(对Windows来说非法),比如,“con”,“lpr”,“com”都是非法的,因为这些都是设备名。当然,含有“/*?:|”和其它特殊字符在Windows(NTFS和FAT)也是不允许的。

是,我们知道这个错误信息对解决问题没什么实质性的帮助,但这个错误信息是来自Subversion库的,我们改不了。

有几个办法可以避免这个问题,请看这里。

2、无法打开文件’XXXnnn-n.txnchanges‘:无法访问,文件正被其它程序唯源使用。

通常报告这个错误的人都说这个问题是随机发生的,并且通常会在一次大的提交中发生。重新提交可能成功,也可能在别的地方出错。

最有可能的原因是,有一个病毒扫描程序正在非正常地占用这个文件。你可以试着禁用病毒扫描,或者让它忽略你的版本库文件。

类似的错误也可能发生在你的工作拷贝,试试让它忽略.svn文件夹。

3、添加‘XXX’失败:同名对象已存在。

这个错误通常是在你更新工作拷贝时发生。之所以抛出这个错误是因为Subversion绝对不会擅自删除或者覆盖你已有的本地文件。有三个可能原因会导致这个错误:

你有一个未纳入版本控制的本地文件,名字跟其他人已添加的文件一样。这种情况下你可以先移走或者重命名你的本地文件再更新。之后你可以决定是需要合并还是把你的闷山袜文件改个名字。

 蚂激 版本库中的一个文件被重命名了,但只是大小写不一样,如Install.txt改为install.txt,而你在本地作了修改。当你更新时就会遇到第一种情况,你修改过的本地文件被视为未纳入版本控制。将它移到其它地方,再更新,问题解决。

版本库中有两个文件的名字只是大小写不同,这在Windows下是不允许签出的,因为Windows的文件系统是大小写不敏感的。很可能其中一个文件是误添加的,所以你要找出是哪一个,然后删除它,以确保不会把更改提交到错误的文件。

4、OPTIONSof’《path》‘:401AuthorizationRequired《url》

升级到1.4.x版之后,你发现无法访问版本库了,每次都出这个错:OPTIONSof’path‘:401AuthorizationRequired’url‘。

这是因为1.4.x版使用了SSPI自动验证,即TortoiseSVN会自动使用登录Windows域控制器的用户信息来作身份验证。

如果你设置你的服务器以SSPI的方式向域控制器作身份验证,而域控制器又没开放GUEST用户的话,不会有问题。但是如果开放了GUEST用户,自然所有以GUEST用户进行的验证都会通过——但是一般来说你是不会授权GUEST访问你的版本库的。这就造成了验证通过了,但授权不成功。

另一个失败的原因是,你设置用来访问版本库的用户跟你用来登录工作站的用户不一致(那我就奇怪了,如果是这样你根本就不应该以SSPI方式来验证呀)。

有几个方法可以解决此问题:

在域控制器中禁用GUEST用户

将登录工作站的用户和访问版本库的用户设为一样

不用SSPI来做版本库验证

检查用户名的大小写,将控制文件中的用户名改为小写对解决问题也可能有帮助

5、客户端版本太旧,不能操作工作拷贝‘XXX’

完整的错误信息是:客户端版本太旧,不能操作工作拷贝’。‘;请下载更高版本的Subversion客户端。

当先使用一个比较高版本的Subversion客户端,然后又用比较低版本的客户端来执行命令,就会发生这个错误。比如你先用了1.4.x版的客户端操作工作拷贝,然后用1.3.x版的操作同一个工作拷贝。

这是因为Subversion1.4和1.5会自动更新工作拷贝的格式,而老版本的客户端不认新的格式。

唯一的解决办法是升级你的客户端,或者用你老版本的客户端重新签出。

6、工作拷贝已过期

这个错误是在提交修改的时候出现的,通常是因为在版本库里,你想要提交的文件已经被其他人修改了。

这时你要先用更新命令更新的的工作拷贝到版本库当前的版本。

你可能会不明白为什么要这么做,尤其是在你确知版本库并没有被修改过的情况下。答案很简单,因为提交的时候,并不会彻底更新你的工作拷贝,而只是那些修改的文件会被自动更新。举个例子,有个新建的版本库:

AddFolderinrevision1

AddFile1andFile2inrevision2

ModifyFile1andcommitinrevision3

现在版本库处于修订版本3,但你的工作拷贝的版本会是这个样子:

Folder:revision1

Folder/File1:revision3

Folder/File2:revision2

这时如果你修改File2然后提交,就会失败。因为客户端告诉版本库File2是在版本2的基础上作修改的,但是版本库已经处于版本3了。如果此时你执行更新命令,就会将File2也变成版本3(当然,你的本地修改还会在的)。

这个错误还可能在你试图创建分支或标记时出现。答案永远都是:如果工作拷贝已经过期,那就更新呗!

7、无法写到标准输出

TortoisePlink使用的是标准的plink代码,但不是针对Windows编译的,因而无法正常发送错误信息。在TSVN的设置-》网络里,将SSH客户端指向标准plink,错误信息就会输出到一个命令行窗口中。设置好之后再像之前一样运行TortoisePlink。

“无法写到标准输出”表示Plink想要抛出一个错误,但是因为TortoisePlink并没有提供一个DOS窗口,所以就没没有标准输出来接收这个错误信息。

知道是设置有问题后,可以先使用普通的plink程序,看到底是什么错误,解决它。

如果普通plink挂住了,那就是参数不对(设置-》网络)。

另一个可能是SSH后台程序找不到svnserve可执行文件。以你将要使用的用户(此处为myuser)登录到服务器,输入“whichsvnserve”,如果没有显示指向可执行文件的路径,就把该文件(以及其它Subversion可执行文件)设为对于该用户可全局访问。

8、400服务器未能理解请求(400BadRequest)

REPORTrequestfailedon’。。。‘REPORTof’。。。‘:400BadRequest(http://。。。)

你的DAV请求被防火墙阻止了,多数防火墙都会这么这么干。你可以让你的管理员更改防火墙的设置,或者以https访问,如,这样你与版本库之间的通信是经过SSL加密的,防火墙无法阻止(如果它没有封掉SSL端口的话)。

另外,现已确认某些病毒扫描程序(如卡巴斯基)也会导致这个错误。

9、403对被请求页面的访问被禁止(403Forbidden)

PROPFINDrequestfailed:403Forbidden

这有可能因为你试图访问版本库的父目录(而不是版本库本身)。你可以试着在URL尾部指定版本库的名字,还有别忘了名字后面的斜杠‘/’。

有关导致此错误的真正原因,请查看Apache的错误日志。

10、405HTTPMethodNotAllowed

PROPFINDRequestFailed-Error405HTTPMethodNotAllowed

这个错误有几种形式,可能的原因有以下几个:

PROPFINDRequestFailed你试图使用较低版本的TortoiseSVN浏览版本库的父目录。你可以试着在URL尾部指定版本库的名字,或者升级TortoiseSVN到1.2.3版或更高。

PROPFINDRequestFailed你漏了URL末尾的斜杠‘/’,较旧版本的TSVN要求在版本库名字后必须有斜杠,否则它会砍掉版本库名字,等于试图去访问它的父目录。

PROPFINDRequestFailed你可能正尝试通过一个不允许DAV请求的代理访问版本库。通常你用网页浏览器浏览版本库是没问题的,只在使用svn客户端时才出错。你必须配置你的代理服务器或防火墙,以让DAV请求通过,或者使用https来访问,多数代理服务器无法分析加密过的信息包,因而也就无法阻止DAV请求了。

另一个可能是你正在运行病毒扫描程序或防火墙,很多此类软件会在你根本不知道的情况下就阻止了DAV请求,可以试一下禁用它们。

LockRequestFailed你尝试在工作拷贝中锁定一个文件,而这个文件在版本库中已经不存在了。你需要先更新工作拷贝。

有关导致此错误的真正原因,请查看Apache的错误日志。

[img]

怎么使用tortoisesvn

TortoiseSVN是一个SVN的客户端,下面是我以前不知道从哪复制的大致使用,希望对你有用:

五.客户端的使用

1.Checkout Repository

首先要Checkout服务器端的Repository,

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

这个Checkout和Visual Source Safe的Checkout意义完全不一样,

VSS的Checkout指的是锁定某个文件,如果你以前使用过VSS,

在学习Subversion时这个问题一定要注意。

Checkout的具体方式是:

在客户端新建一个空目录,比如:F:\Project1

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

之后在“URL of Repository”文本框中填入你想要连接的Repository的地址,

这个URL地址可以用浏览方式加入。

对于在本教程第二节建立的Repository,

URL应该是“svn://xxx/project1”

(xxx可以是服务器端主机名,也可以是服务器端的ip地址)。

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

输入在教程第三节设置的用户或饥返名和密码。

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

比如:在服务器端Repository中有一个a.txt文件,

那么Checkout之后F:\Project1目录下也会出现一个a.txt文件。

在本例中由于服务器端的Repository还未添加任何文件,

所以在客户端的F:\Project1下没有文件被Checkout。

执行Checkout除了会在F:\Project1产生Repository存储的文件及目录外,

还会产生了一个“.svn”的隐含目录,该肢祥目录是由subversion管理的,

不要删除或者手工改动其中的文件和目录。

现在F:\Project1中的文件和目录就叫做Repository的“Working Copy”简写“WC”

(这个简写...汗)。

以后对Repository中文件和目录的修改,添加,删除的操作衫饥,

都是通过对这个“Working Copy”的操作实现的。

Checkout执行完后,

会发现F:\Project1目录的图标的左下角附着了一个小的状态图标

(当F:\Project1目录中的文件改变时,这个状态图标也会随之变化),

它表示F:\Project1是一个Repository的“Working Copy”,

F:\Project1内的所有文件和目录也会有类似的状态图标。

2.添加文件

将要添加的文件或者目录拷贝到F:\Project1下,

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

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

则鼠标不要在F:\Project1中点中任何文件,

然后单击右键,TortoiseSVN-Add,

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

这时文件的状态图标会发生变化。

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

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

如果想要别人也看见你对Repository的修改,你需要

在F:\Project1下单击右键,SVN Commit...,

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

文件的状态图标也会更新。

不管你在“Working Copy”内添加、修改、删除文件后,

要想其他人也看见你的修改,

都必须用Commit命令将所做修改递交到服务器端的Repository。

3.修改文件

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

文件的状态图标会变化,

然后单击右键,SVN Commit...

提交修改,只有当执行Commit提交修改后,

你所作的修改才会反映到服务器端的Repository中。

4.删除文件

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

单击右键,TortoiseSVN-Delete,提交修改。

注意千万不要用“Delete”键来删除文件,否则将无法提交你的修改。

这一点对目录的删除来说尤为重要。

5.放弃修改

当你添加、修改、删除文件后,决定放弃修改,

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

本地的“Working Copy”中的文件和目录会恢复到你修改前的状态。

6.获取Repository的最新版本

当一个团队合作开发项目时,

每一个人都在不断的对Repository进行更新,

你需要不断的更新自己的“Working Copy”,

以获取项目最新的文件。

当第一次获得最新Repository的文件时,

我们用Checkout命令,前面已经介绍了,

以后再获取最新文件时就不用Checkout了。

而改用Update命令。

接着前面的例子,这时F:\Project1已经成为一个“Working Copy”了

(通过执行Checkout命令),现在其他人已经对Repository进行了修改,

我想将别人的修改反映到我的“Working Copy”中,

具体的方法是:在F:\Project1目录上单击右键,

SVN Update。这时F:\Project1中的文件就是最新的版本了。

注意,如果当你的“Working Copy”中有被修改的文件,

或者有被删除的文件,并且还未提交这些修改时,

这些文件在执行Update过程中是不会被更新的。

比如你修改了F:\Project1下a.txt文件,

还未提交修改,那么,

当你对F:\Project1进行Update时,

a.txt文件是不会更新为Repository上的a.txt文件的。

所以如果想放弃当前的所有修改,

并将F:\Project1下所有文件及目录更新到最新版本,

应该先对F:\Project1执行Revert命令再执行Update命令。

7.subversion的版本控制模型

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

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

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

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

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

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

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

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

而是针对整个Repository而言的。

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

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

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

考虑这种情况:

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

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

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

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

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

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

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

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

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

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

这时Repository的Revision变为11。

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

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

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

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

李四修改的文件是Revision10的a.txt文件,

而不是最新的Revision 11的a.txt文件。

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

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

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

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

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

第十行还是“She”,就是说Subversion已经将张三的修改“合并”到李四的a.txt文件中了。

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

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

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

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

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

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

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

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

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

这时Subversion将Revision11的a.txt文件与

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

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

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

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

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

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

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

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

告诉Subversion已经解决了Conflict。

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

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

8.“.svn”目录

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

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

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

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

(实际存储副本的地方是F:\project1\.svn\text-base目录),

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

该目录下有两个文件a.txt和b.txt还有一个子目录ccc,

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

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

比如:F:\project1\.svn\text-base中存储的a.txt和b.txt

是最近一次执行完Update或者Commit命令之后F:\project1下的a.txt和b.txt的拷贝。

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

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

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

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

比如你修改了F:\project1\a.txt文件,

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

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

修改过的F:\project1\a.txt文件

就会被F:\project1\.svn\text-base中a.txt文件的副本所替代,

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

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

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

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

该目录存储的是F:\project1\ccc\d.txt的副本

(d.txt的副本位于F:\project1\ccc\.svn\text-base)。

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

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

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

必须用TortoiseSVN-Delete,

而不能用“Delete”键来删除文件或目录,尤其是对于目录的删除。

9.混合版本

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

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

该目录下有两个文件a.txt和b.txt。

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

这时,a.txt和b.txt的Revision都是24

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

Revision是对于整个Repository而言的,

这里所指的是Repository的Revision24所存储的a.txt和b.txt,

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

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

这时Repository的Revision就变成25了。

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

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

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

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

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

所以不会出现Conflict。

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

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

它还是Revision24的a.txt文件,而你的b.txt文件是Revision26的b.txt文件。

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

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

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

(Revision24的a.txt文件和Revision26的b.txt文件)。

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

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

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

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

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

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

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

10.文件的锁定

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

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

该模型在对文本文件进行版本控制时工作的很好,

但是有些需要进行版本控制的文件并不是文本文件,

比如说图像文件,这种模型在这种情况下就不能正常工作了,

因为文本文件可以合并,而二进制文件则无法合并。

所以Subversion从1.2开始支持一种叫Lock-Modify-Unlock

(锁定-修改-解锁)的版本控制模型。

在Windows下最常用的版本控制软件Visual Source Safe(VSS)就是采用这种模型。

这种模型要求在对一个文件修改前首先要锁定这个文件,

然后才能修改,这时,别人将无法对该文件进行修改,

当修改完后再释放锁,使其他人可以对该文件进行锁定,然后修改。

锁定文件的方法是:TortoiseSVN-Get Lock...再点OK按钮,

这时就完成了对文件的锁定。

这时,如果其他人想对文件进行锁定时,

Subversion会对他提示该文件已经被别人锁定。

当你修改完文件后,然后单击右键,SVN Commit...,

将修改提交,默认情况下,提交的时候就会对该文件解锁,

如果你想仍然锁定该文件,请在commit时弹出的对话框中选中keep lock复选框。

11.文件的附加属性

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

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

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

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

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

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

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

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

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

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

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

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

Repository也会生成新的Revision,

所以从某种意义上来说,

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

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

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

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

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

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

考虑这种情况,

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

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

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

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

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

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

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

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

由于图片文件无法合并,

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

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

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

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

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

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

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

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

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

文件也会变成只读的了。

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

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

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

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

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

具体的方法是:

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

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

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

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

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

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

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

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

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

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

这时当其他人执行Update时,

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

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

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

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

12.回到以前的版本

由于Subversion会记录你对Repository的每一次修改,

因此能够很容易的获得Repository以前某一时刻的状态。

比如:现在Repository的最新Revision是56,

这时我想看看Repository在Revision24时的状态,

可以在本地的Working Copy中单击右键,

TortoiseSVN-Update to Revision...,

然后输入你想要回复到的Revision号,点OK按钮。

回到以前的版本还有一种情况是我想将Repository的

最新Revision的状态与以前某一个Revision的状态一模一样,

上面那种方法就不适合,

上面的那种方法只是将本地的Working Copy回复到以前的状态,

而服务器端的Repository并没有回到以前的状态。

将Repository的最新Revison的状态回复到以前某个Revision的状态具体的方法是:

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

然后在Working Copy中单击右键,

TortoiseSVN-Show Log,

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

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

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

(比如Repository的最新Revision是30,

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

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

选中Revision17,

就是说选中Revision17到Revision30之间的所有Revision)。

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

选中“Revert changes from these revision”。

再点Yes按钮,就可以将Working Copy的状态回复到目标Revision。

注意,此时只是Working Copy回复到目标Revision,

之后应该用Commit提交修改,

这样Repository最新状态就与目标Revision的状态一样了。

这两种回复到以前版本的方式截然不同,

第一种方式是将整个Working Copy回复到某个Revision,

也就是说这种方式Working Copy中的“.svn”目录所存的文件副本也与目标Revision的一模一样,

如果这时你没有修改文件,你将不能执行Commit命令。

而第二种方式客户端Working Copy中的

“.svn”目录所存的副本始终是最新的Revision的文件副本

(这里我们基于一个假设:在Update之后没有其他人对Repository做修改)。

这种方式就像是我们自己手工将Working Copy的文件状态修改为目标Revision,

在修改之后提交修改一样。

13.查看修改

有时我们对Working Copy的许多文件进行了修改,

这些文件位于不同的子目录,我们就可以在Working Copy的最上层目录单击右键,

TortoiseSVN-Check For Modifications,

弹出的对话框就会显示你所做的所有修改明细。

还有一种情况是我们的Working Copy已经很久没有执行Update命令,

我们想看看Working Copy中有哪些文件已经发生修改了,

这时就可以在Working Copy的最上层目录单击右键,

TortoiseSVN-Check For Modifications,

在弹出的对话框点击Check Repository按钮后,

就会显示服务器端已经修改了的文件。

该方法还有一个用途就是查看文件的锁定,

当你想锁定一个文件时,你想先看看这个文件有没有被别人锁定,

点击Check Repository按钮会显示服务器端Repository所有被锁定的文件,

如果你想锁定的文件不在这里面,那就说明该文件目前没有人锁定。

如何使用tortoisesvn

方法/步骤

如果没有TortoiseSVN客户端,可以去这里下载:tortoisesvn.net/downloads.html,根据自己的实际情况下载对应版本。

下载后安装,在开始菜单中就能见到下面的图标,说明安装成功,现在就可以开始使用TortoiseSVN了。

选明滑碧羡定本地的一个文件夹存放从服务器下载的代码。

然后右击这个文件夹,选择“SVN CheckOut...”。

填写仓库地址(URL)。其他地方可以不用修改。Version处可以修改,表示从指定的版本号开始。

点击“OK”按钮就开始下载了。

下载成功后,可以看到下图这样的文件夹,前面会有个绿色的对号。

如果文件修改了图标上会变成叹号。

如果要提激慧腊交修改的文件,可以右击该文件或者选中多个修改的文件,选择“SVN Commit”,在弹出的对话框中必须填写注释信息Message,否则会提交失败。

7

新添加的文件或者文件夹前面会是问号。

如果要提交这样的文件,可右击文件,选择TortoiseSVN-Add,也需要填写Message项。

tortoisesvn怎样安装

一般我们都是先讲讲服务器的配置,然后再讲客户端的使用,但是在TortoiseSVN上,却可以反过来。因为,如果你的要求不高,只是想在本机,或者是可信任的局域网络中使用SVN版本控制,可以不需要安装SVN,而只使用TortoiseSVN即可。

接下来就来讲讲TortoiseSVN的使用。

1、下载TortoiseSVN。下载地址:,其中也包括了中文语言包的下载。

2、安装TortoiseSVN。很简单,一路“Next”即可。安装完TortoiseSVN后,重启计算机。现在,你就可以使用TortoiseSVN了。

TortoiseSVN集成于windows的资源管理器,直接在资源管理器中点击鼠标右键即可看到TortoiseSVN的功能选项。

3、安装中文语言包。安装下载的中文语言包安装程序。完成后,在TortoiseSVN右键菜单的Settings选项中,选择简体中文即正枣答可。

4、获取已有的版本库文件。

版本库是Subversion的核心部分,是数据的中央仓库。版本库以典型的文件和目录结构形式文件系统树来保存信息。任意数量的客户端连接到Subversion版本库,读取、修改这些文件。客户端通过写数据将信息分享给其他人,通过读取数据获取别人共享的信息。

TortoiseSVN可以通过file://、http://和svn://多种协议连接版本库。

现在尝试获取互联网上的一个开源系统的版本库文件。

Cnpack是面向Delphi的一个开源工具组织,代码举慧版本库的http地址是:。

(1)建立一个工作目录,如d:\源码。

(2)在工作目录中,选择TortoiseSVN右键菜单“SVN检出”,显示检出对话框,输入cnpack版本库url,检出目录设定为工作目录下的cnpack目录。

(3)确定后,TortoiseSVN获取到文件,并在工作目录中建立cnpack文件夹,里面为最新的代码文件。文件夹状态已为SVN关联状态,如图。

(4)你也可以在TortoiseSVN菜单中选择“版本库浏览器”,输入版本库url,岩大显示版本库浏览器,并可以直接查看和管理版本库中文件。

5、在本机提供版本管理。

TortoiseSVN可以通过file://协议打开本机或者共享目录中的版本库,同时TortoiseSVN也提供了方便的创建版本库的功能,因此,我们可以直接使用TortoiseSVN在本机或者局域网中建立版本控制的环境。

需要注意的是,共享目录下的版本库需要开放读写权限给多人操作,因此,文件的安全性存在问题,^_^,这也是VSS的问题吧?

(1)创建版本库。

建立多版本库父目录c:\svn_ds。在其中创建版本库目录LearnAIR(学习AIR的代码管理)。点击TortoiseSVN菜单的“在此创建版本库”。

(2)如果没有文件系统读写错误,将出现成功提示信息,LearnAIR目录中出现版本库初始文件和目录信息。

(3)同前面打开版本库说明,选择TortoiseSVN菜单“SVN检出”,版本库url地址填入file协议,如:。设置检出目录,确定。建立起检出目录。

(4)从检出目录中进行文件管理。

将AIR代码目录放入检出目录中,TortoiseSVN会自动判断文件夹和版本库状态,如:

选择“SVN提交”,可将检出目录中的文件和文件夹选择提交到版本库中。

检出目录中修改后的文件,图标状态改变:

同样,可查看目录中文件和版本库中差异:

基本的版本管理操作并不复杂,如果对安全性不高,这样的本地版本管理很适用于个人的一些代码历史跟踪、草稿文档的管理等。

关于svntortoise和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表