svn课堂

更新时间:2024-05-05 20:05:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Svn课堂

一:svn安装

安装文件:

第一步:安装svn,在D盘的目录下

其中:

bin:svn可执行命令(例如svnadmin等)

由于svn是安装版,当安装成功,会在电脑的环境变量中显示:

二:svn的一些常用命令

(1)判断svn是否安装成功。在cmd下执行:可以看到svn安装成功。

命令:svnadmin --version

(2)创建svn数据仓库

命令:svnadmin create D:\\repository\\svn\\itcast

可以看到在指定的目录下生成:

(3)启动svn服务

命令:启动SVN服务:

svnserve -d -r D:\\repository\\svn\\itcast [单仓库启动]

svnserve -d -r D:\\repository\\svn [多仓库启动] 建议使用多仓库

(4)判断svn服务是否启动成功

重新开启窗口

命令:netstat -an 查看3690端口是否被占用

(5)客户端从服务器端检出文件

命令:svn checkout svn://ip/repositoryName

如果服务器端开启的服务命令是【单仓库启动】:

由于服务器端已经是在itcast目录下了,所以客户端不需要在指定itcast了,可以写成:

但是如果服务器端开启的服务命令是【多仓库启动】:

此时客户端必须要指定哪个仓库,需要写成:

其中.表示检出到当前目录路径。

如果连接成功,可以在E:\\svnclient\\zhangsan会出现以下的效果:

其中zhangsan的文件夹中出现:

注意这个文件,不要去修改它

但是由于SVN服务器上没有内容,所以获取的是空的文件。相当于与服务器连接上了。

(6)客户端将文件纳入版本控制器

命令:svn add filename

在E:\\svnclient\\zhangsan的文件夹中,新建一个java类A.java,如果想要将A.java传递到服务器上,并纳入到版本控制。可以执行:

此时,在E:\\svnclient\\zhangsan的文件夹中显示。

(7)客户端提交文件

命令:svn commit -m \

其中-m表示需要为提交或操作服务器的文件做必要的说明。 这里不要执行:

按照要求,我们执行:

此时说明没有zhangsan这个用户的,这里必须要在服务端配置zhangsan的用户、权限才可以访问。

重点:修改服务器端配置:

修改itcast/conf文件夹下的svnserve.conf文件,配置:

其中anno-access = read表示匿名用户,为匿名用户从read(读)定义成write(写)的操作。

此时再次执行:svn commit –m ―zhangsan init A.java‖ A.java,可以看到提交服务器成功。

(8)从服务器端获取代码

命令:svn checkout svn://ip/repositoryName 使用lisi的账号,获取zhangsan提交的代码。

这样在E:\\svnclient\\lisi可以看到:

如果lisi在本地写一个文件B.java,然后将B.java也上传到服务器,重复上面的命令,如图:

注意:你会发现提交后的版本变成2,说明服务器只要发生变化了,都会产生一个新的版本

(9)本地更新服务器上最新的代码

命令:svn update(更新所有文件) svn:update [filename] (更新指定的文件)

此时在E:\\svnclient\\zhangsan的目录下,会看到:

总结:一般我们执行svn checkout svn://ip/repositoryName命令只要一次,就相当于和服务器取得连接,以后都会执行svn update,用来更新服务器端最新的代码。

(10)删除服务器上的代码

命令:svn delete filename

可以看到E:\\svnclient\\lisi下没有B.java

注意:真正的项目中,尽量不要使用delete语句,这样很容易误删,如果误删多了,恢复起来很麻烦,让它多着去吧,也不差这1,2个文件。

(11)恢复服务器上误删的代码

命令:svn revert filename

可以看到E:\\svnclient\\lisi下又会出现B.java

注意:只能恢复提交之前的状态,如果删除代码已经提交(commit),那么将不能再恢复 例如:如果执行删除(delete),然后提交(commit),再恢复(revert),则不能再次恢复B.java文件。

可以看到E:\\svnclient\\lisi不会会出现B.java

(12)其它命令

命令:

svn info-显示本地或远程条目的信息

svn list-列出版本库目录的条目

svn status-查看当前工作区状态

svn help-获取帮助信息

(13)如何将svn的服务不通过窗口开启,直接注册到计算机的系统服务中

注册Windows系统服务:

sc create SVN-Service binpath= \Files\\Subversion\\bin\\svnserve.exe --service -r D:\\repository\\svn\

其中:

SVN-Service:为服务名。

binpath= \Files\\Subversion\\bin\\svnserve.exe --service -r D:\\repository\\svn\:使用svnserve的命令,启动D盘仓库为repository\\svn文件夹下的所有服务。 displayname= \:显示的服务名称。 start= auto:自动启动

depend= Tcpip:依赖服务器(固定写法) 其次注意:

sc对选项的格式还有要求,例如―depend= Tcpip‖不能写为―depend = Tcpip‖或―depend=Tcpip‖,也就是―=‖前不能有空格,而后面必须有空格。

可以在电脑的服务项中看到我们创建的服务。并且启动我们的服务。svn服务器就起来了。

附加:删除服务的命令

sc delete \服务名\如果服务名中间有空格,就需要前后加引号),服务名称可以在服务的属性里找到,不要将服务名称误认为显示名称。

注意:如果是win7系统,必须以管理员的身份运行才能注册系统服务

三:安装TortoiseSVN客户端

安装文件:

按照路径安装即可。

安装成功,需要重新启动服务器,可以在桌面点击右键,看到。

(1)使用图形界面完成以上的工作

(2)创建svn数据仓库

(3)客户端从服务器端检出文件

使用Check Out命令与服务器取得连接,同时获取服务器上的代码。

出现:

(4)客户端将文件纳入版本控制:

(5)客户端提交文件

注意:要修改itcastPic仓库下的conf文件,将anno-access = write,即匿名用户为可写。

这回就可以提交了。

但是项目开发中不能总是用匿名用户啊?应该指定用户和权限,操作svn服务器的仓库。应该怎么办呢? 【1】:这里要修改svnserve.conf文件,内容如下:

其中:

anno-access = none:表示不再使用匿名用户登录。

auth-access = write:表示指定用户并授权登录,并对仓库可写

password-db = passwd:passwd表示同级目录下的文件passwd生效,由它来指定svn的用

authz-db = authz:authz表示同级目录下的文件authz生效,由它来指定svn的权限 注意:这个文件要求的格式很严格,必须要顶格写。 【2】:这里要修改passw文件,内容如下:

其中:

设置3个用户zhangsan,lisi,wangwu,密码都是123 【3】:这里要修改authz文件,内容如下:

其中:

itcastGroup = zhangsan,lisi:表示定义一个组,zhangsan和lisi是组里面的成员。

[/]:由于svn服务器的权限是针对于目录路径的,/表示根目录路径,即可以访问服务器下所有包下的文件。 @itcastGroup = rw:表示定义一个组,其中的权限为读写,这里定义组一定要加@,否则svn

会认识是定义一个普通的用户。

wangwu = rw:表示定义一个用户wangwu,其中的权限为读写。

* =:*表示除了用户组定义的用户(zhangsan、lisi)以及单个用户(wangwu)之外的其他用户,他们没有任何的操作权限。

提交文件时:可以看见需要指定用户名和密码,并点击OK完成提交。

注意:这个钩,如果开发的时候,建议勾上,这样每次操作svn服务器的时候(更新和提交),就会记住你的用户名和密码,否则每个文件的操作都会提示你需要输入用户名和密码。 但是现在为了演示可以不勾,为了演示lisi提交代码,zhangsan更新代码的操作。

(6)从服务器端获取代码

Check out服务器端的代码

查看E:\\svnclient\\lisi的文件夹

lisi又创建了一个B.java,将B.java上传到服务器,首先先要纳入到版本控制(Add),然后才能上传到服务器(Commit)

(7)本地更新服务器上最新的代码

大家注意:以后工作开发代码的时候,天天早上的第一件事情必须要更新代码,保证你要开发的代码是最新修改后的文件,否则会出现版本的问题,再提交时的时候会出现问题。

(8)使用TortoiseSVN客户端查看svn仓库的内容

可以看到:

可以看到A.java和B.java都在svn服务器的根路径下,能不能使用文件夹用来管理我们的文件呢?

在桌面上创建project文件夹,cn/itcast包,以及包中的文件。

然后执行导入(Import):

然后查看svn的仓库,可以看到:我们的文件夹已经上传到了svn服务器

导出(Export)的使用,用来去掉.svn的文件。因为这些文件在系统上线的时候需要去掉。否则会占用很多的系统资源。

或者在可视化的仓库页面中执行:

看到相同的页面。

点击OK,会在桌面上看到我们导出的文件。

这次我们可以看到.svn的文件没有了。

(9)TortoiseSVN客户端的图标

【1】图标汇总

【2】正常状态

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

【3】修改后状态

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

【4】版本冲突

如果在提交的过程中版本出现了冲突,图标变成黄色感叹号。

例如:

zhangsan修改文件A.java public class A{ private String id; private String name; }

然后提交(commit)到服务器

lisi没有更新最新的代码,直接修改了文件A.java public class A{ private String id; private String address; }

可以看到2个版本的文件,是不允许在服务器中出现的,所以A.java无法再次提交,提示:

这样就需要lisi重新更新(update)代码,但是更新后的结果却变成:

A.Java表示版本出现冲突,记录2个不同的版本,比较乱 A.java.mine表示本地的当前版本(即我开发后需提交的版本) A.java.r7表示修改之前的版本(即我修改之前的版本)

A.java.r8表示服务器上最新的版本(即其他人在我提交之前提交的最新版本

解决方案:

使用TortoiseSVN工具,完成操作:

可以看到以下的页面:

选择A.java.mine冲突的行,点击右键:

其中:

Use this text block:表示用我本地的代码覆盖服务器的代码。表示当前选中一行会被覆盖。

不建议使用,这样zhangsan开发的代码就会被覆盖。

Use this whole file:表示用我本地的代码覆盖服务器的代码,整个都文件覆盖,

更不建议使用。这样zhangsan就彻底疯了。

Use text block from ?mine‘ before ?theirs‘:不覆盖代码,表示让我本地开发的代码放置在前面,

服务器上的代码放置在后面。建议使用。

Use text block from ?theirs‘ before ?mine‘:不覆盖代码,表示让我本地开发的代码放置在后面 服务器上的代码放置在前面。建议使用。

我们可以选择第四个操作:然后保存,关闭

再选择A.java然后选择Resolved选项,表示编辑完成已经解决版本冲突问题:

最后再执行提交(commit),上传到服务器。

【5】文件上锁(只读)

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

例如:

zhangsan操作A.java文件。

选择【new】

选择【svn:needs-lock】,点击【OK】

然后将设置needs-lock属性的A.java文件提交(commit),会看到下面的图标

然后使用lisi更新(Update)代码,会看到下面的图标:

此时A.java变成只读的了,不允许任何人修改,那如果需要修改怎么办呢?往下看。

【6】文件上锁并释放锁(只读)

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

解决方案:

zhangsan选择A.java后选择SVN Get lock…,获取锁

此时图标变成以下的形式,表示只有zhangsan能够修改该文件,lisi和其他人是不允许修改的:

lisi再获取A.java文件锁的时候,即执行SVN Get Lock的命令,会弹出以下的提示,表示zhangsan已经在修改文件了,lisi是不允许修改该文件的提示,如图。

注意:

(1)只有zhangsan释放锁,即提交(Commit)的操作,lisi才能重新获取锁,并同时获取svn服务器上的最新版本的文件代码,对A.java进行编辑和修改。 (2)如果没有修改A.java,可以不需要执行提交(Commit)的操作,可以选择释放锁(Release lock)的选项:

(3)这里要求A.java只能被一个人修改,不允许多个人修改,要求开放人员修改完成后要及时提交释放锁,否则其他人员就会无法获取,就会找你麻烦了。

这种操作一般的项目组都建议少用,一个文件多个人修改,再合并,开发效率比较高。

【7】服务器计划删除文件

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

【8】服务器计划添加文件

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

四:复杂的权限控制(事例)(了解知识) (1)项目组对svn上的包路径设置权限

事例:

需求:如果对开发的包结构限制权限

例如:zhangsan开发domain包中的文件,其他人不允许修改 lisi开发dao包中的文件,其他人不允许修改

wangwu开发service包中的文件,其他人不允许修改 首先需要设置仓库中的conf文件夹的svnserve.conf文件:

测试:

zhangsan可以操作cn.itcast.domain包下的内容。

zhangsan不可以操作cn.itcast.dao包下的内容。

使用lisi操作cn.itcast.dao包下的内容,完成操作。

(2)项目组对提交信息的message做字数限制,强制要求输入message消息

强制开发人员输入对文件描述的信息,这样便于对svn服务器上文件日志的管理。 zhangsan右键点击属性(Properties)

点击【new】

选择【tsvn:logminsize】,即日志最小字数显示,填写5表示要输入至少5个字符

点击【OK】,保存

这样我们在提交文件的时候就会看到,如果没有填写日志message,【OK】键是不允许操作的:

本文来源:https://www.bwwdw.com/article/u22g.html

Top