svn文档
在现实的软件开发中有可能遇到的问题:
代码管理混乱 备份多个版本,占用磁盘空间大 解决代码冲突困难 容易引发BUG 难于追溯问题代码的修改人和修改时间 难于恢复至以前正确版 无法进行权限控制 项目版本发布困难参照SVN 安装界面.doc文件
3.1仓库的位置 F:\work\course\svn\repository\svn
3.2利用svnadmin –create命令创建仓库
上面的命令指的是在指定的目录下创建一个仓库。
3.3库里的文件4.1两种启动-1-命令行
4.1.1启动命令
Svnserve –d –r 文件路径4.1.2检查是否启动
上面的这个命令可以检查端口号,一般svn默认的端口号是3690.
说明该端口号正在被监听
4.1.3说明 当把命令窗口关闭以后,监听就没有了,所以这种启动方式必须把命令窗口打开。
4.2两种启动-2-windows服务
4.2.1执行启动命令 sc create SVN-Service binpath= "F:\work\course\svn\bin\svnserve.exe --service -r F:\work\course\svn\repository\svn " displayname= "SVN-Service" start= auto depend= Tcpip binpath为执行命令所在的路径 -r 为仓库的路径:这里配置的多仓库 也就是说可以在svn下建立很多仓库,例如建立itcast仓库 访问的时候:svn://localhost/itcast。建立oa,则访问的时候 svn://localhost/oa 如果路径改为F:\work\course\svn\repository\svn\itcast,只能访问itcast这一个仓库。4.2.2 Window服务
当成功执行上述的命名以后,就可以在window的服务下面看到类似的内容。
4.2.3删除服务 sc delete SVN-Service说明:把仓库中的某一个项目checkout出来 svn checkout svn://localhost/itcast F:\develop\workroom\user.1.1建立用户
创建一个客户端操作文件夹
F:\work\course\svn\develop在该文件夹下建立两个文件夹,代表两个用户user1和user2
5.1.2利用命令
利用命令把itcast仓库checkout到user1目录
创建完毕以后user1下会多一个文件夹
这说明创建完毕了。
在客户端创建一个文件,把该文件加入到该仓库中,加入到版本控制中
5.2.1执行命令
在客户端user1中新建一个txt文件:a.txt
说明:把a.txt加入到了itcast仓库,加入到了版本控制中
说明:当把一个文件加入到指定仓库以后,接下来的操作就是提交。在提交的时候必须写一些说明(可以写这次提交都做了一些什么内容)
5.3.1 执行命令说明:当执行这个命令的时候失败了。因为用的是匿名用户登录的。
在F:\work\course\svn\repository\svn\itcast\conf路径下有一个文件:svnserve.conf 该文件有一句这样的 # anon-access = read匿名用户只能有读的权限,所以这里应该改一下:anon-access = write以后再次执行次命令的时候:
说明命令执行成功了。在itcast仓库中加了一个文件a.txt,版本号为1 - 5.3.2user2用户执行checkout命令
把a.txt文件checkout到user2中,并且版本为1
5.3.3User2用户修改a.txt文件5.3.4User2用户commit文件文件a.txt在user2下再次进行修改 - 5.3.5User1用户进行更新
把user1下的a.txt文件更新到版本2
5.3.6当删除掉客户端的一个文件时 当删除掉客户端的一个文件时,可以使用svn update命令把服务器上的版本download下来。1、在F:\work\course\svn\repository\svn路径下建立一个文件夹为itcast 2、进入itcast目录,如图所示
3、执行完第二步后,在itcast目录中产生了
这个目录和用命令行创建的工程的目录是一样的。
在F:\work\course\svn\develop目录下创建两个用户user1和user2,即两个文件夹。
把itcast仓库放入到user1中 执行完上述操作以后itcast仓库就被下载到了user1中
添加完毕以后会出现如下的图标:
在执行commit之前还要修改权限的部分。
这个时候,user2的icast仓库中已经存在a.txt文件了
6.9.1在user1用户下针对itcast库的a.txt执行update操作
可以针对user1用户中的a.txt文件进行上锁的操作。
当输入用户名和密码的时候,就上锁了,上锁的突变如下所示:
当用户user2试图再次修改此文件时,会报如下的错误:
6.12.1a.txt变成needs-lock
a.txt作如下的操作:
添加一个属性:svn:need-lock,值为true,确定以后变成如下的图标:
这个图标表明再次修改必须上锁。
6.12.2a.txt上锁
6.12.3进行修改
6.12.4进行commit操作
点击remove就可以了
6.14.1user1更新a.txt文件 6.14.2user2更新a.txt文件 6.14.3user1更改a.txt文件 6.14.4user2更改a.txt文件 6.14.5user1对a.txt进行commit操作 6.14.6user2对a.txt进行commit操作
当user2对a.txt进行操作的时候,user2操作的a.txt文件并不是最新的。所以报如下的错误。
6.14.7对a.txt执行update操作
该图标表示文件有冲突了。 a.txt.mine表示user2用户最新的 a.txt.r11 表示提交之前的 a.txt.t12表示服务器上最新的
6.14.8解决冲突
Theirs表示服务器上的 Mine 表示自己的 Merged 表示合并以后的版本
可以在冲突的那一行点击右键,选择这四个选项中的其中一个。这个时候,Merge就会发生变化。
这样就可以解决冲突的问题。
6.14.9Resolved 当解决完毕以后,告诉svn已经解决完了
6.14.10commit
在itcast库的config目录下有授权的相关内容。
7.1.1svnserve.config 定义所有认证和授权政策。 7.1.1.1anon-access 匿名用户的访问权限,应该是什么访问权限都没有 anon-access = none
7.1.1.2auth-access 认证用户授权 auth-access=write
7.1.1.3password-db 指定用户的认证文件为passwd文件 password-db=passwd
7.1.1.4authz-db authz-db=authz 指定用户的授权文件为authz。
7.1.2password 存放项目成员账户信息 [users] harry = harryssecret sally = sallyssecret边代表用户名,等号右边代表密码,所以可以这么user1=user1pwd user2=user2pwd统中有两个用户user1,user2,密码分别是user1pwd,user2pwd。
7.1.3authz 复杂的群主授权控制
[groups] harry_and_sally = harry,sally harry_sally_and_joe = harry,sally,&joe groups是组的意思 等号左边的是组名,等号右边的是组的成员 所以可以写 svn_group = user1 把user1加入到svn_group组中 # [repository:/baz/fuz] #@harry_and_sally = rw # * = r # [repository:/baz/fuz]:指出针对哪个仓库 # @harry_and_sally = rw:针对某一个仓库,对组进行授权 # * = r:对除了这个组以外的其他用户进行授权 [itca st:/]:针对itcast仓库 @svn_group = rw 针对svn_group组进行授权 user2 = rw 针对user2用户进行授权 * = 除了以上用户以外的其他用户都不能授权 [itcast:/doc] user1 = rw * = *以上配置说明:针对itcast仓库的doc目录,只有user1有读写权利,其他的用户都没有。
当配置完成权限以后,当在user1用户下或者user2用户下修改了一个文件,进行commit的时候,系统会自动提示如下:
这个时候只有输入正确的用户名和密码信息才能提交。
从官网上下载插件http://subclipse.tigris.org,可以从这个网站下载到最新的svn插件。
在F:\work\course\svn下创建插件目录myplugins\svn\eclipse,把下载完的解压后的两个文件夹放入到该目录下
在myeclipse安装的dropins目录下创建svn.link文件 Link文件中的path
path的值就是svn插件的目录所在。
打开如下的视图:
准备新建一个资源库的位置
输入库的url:
itcast库就被导入进来了
在新建项目的时候,选择从svn上检出项目 ! 这里写图片描述
选择现有资源库的位置
检出的项目在myeclipse中
可以利用Compare with的功能的子功能 基本修订版 最新版本的上一个版本
利用这个功能可以和以往的版本做对比。
可以选择某一个版本的内容覆盖当前版本的内容
新建一个项目,做如下的操作:
选择svn
把项目保存在itcast资源库
9.8.1Trunk 存放开发的主线,团队成员在开发的时候一直要用这个库中的内容
9.8.2Branches 存放支线副本:当项目稳定以后,先发布到tags下,如果发现了bug,再从tags下检出到branches下。在该版本下进行bug的修复,把修复完毕的稳定的版本重新发布到tags下。
9.8.3Tags 存放标签副本,也就是存放稳定版本
9.8.4问题: 一个公司开发了一个oa系统,随后发布了一个版本v1.0,由于这个版本还是比较成功的,然后客户提出了更多的需求,随后开发团地准备开发下一个版本v2.0,当开发团队 在如火如荼的工作的时候,客户突然提出了在v1.0版本有一个bug,需要改进,而且必须把这个改进引入到v2.0版本中。用svn怎么样解决这个问题呢?
9.8.5解决
9.8.5.1在svn库中建立一个项目oa
9.8.5.2让oa成为svn项目
9.8.5.3修改权限,让匿名用户具有写的权限
9.8.5.4在客户端准备一个oa文件夹
9.8.5.5在oa文件夹下建立三个文件夹
9.8.5.6把oa里面的内容导入到svn库中
9.8.5.7查看仓库的结构
从上面可以看出,branches,tags,trunk已经被加入到仓库中了。
9.8.5.8把正在开发的一个项目导入到trunk(主线)中。
这样该项目的基本代码就加入到了trunk中。
9.8.5.9把trunk的项目check out到myeclipse中。
经过以上几步,trunk中的目录就被导入到了oa中。
9.8.5.10发布v1.0版本
选择发布到tags目录
在tags下建立一个文件夹V1.0
9.8.5.11开发V2.0的功能 在A.java类上稍微做一下修改即可。
9.8.5.12现在V1.0有bug,对V1.0的版本做检出
9.8.5.13对V1.0的版本进行修改 9.8.5.14对修改后的内容提交 9.8.5.15以上操作不对,因为tags的内容不能进行修改 9.8.5.16
9.8.5.17对tags中的V1.0做分支
对tags中的V1.0做分支,然后移动到branches中,为V1.0_fixup。
9.8.5.18切换版本库的路径
把路径切换到branches/V1.0_fixup。
9.8.5.19提交 因为版本库已经切换到了branches/V1.0_fixup,所以这个时候可以提交了。
9.8.5.20把修复好的V1.0_fixup发布
选择branches中的版本做分支标记。
发布到稳定库中(tags),并且版本的名字为V1.1
9.8.5.21把V1.1版本加入到原来的版本中
在trunk版本中,选择合并。
从tags/V1.1中进行merge
9.8.5.22在企业的应用 1、项目经理会发一个word文档 1、svn的仓库的地址 2、使用svn的用户名和密码 3、把svn上的项目导入到myelicpse中 4、做自己的模块,把自己写的东西上传到svn上 5、版本的对比,合并版本