一.什么是svn
全称 SubVersion
代码管理工具,在团队开发的时候使用,便于代码的管理
刚开发SubVersion时 开发团队用的CVS(CVS是在SVN出现之前的代码管理工具)
SubVersion1.0出现后 就使用SubVersion来管理SubVersion了
C/S程序
Server 服务器 用来管理代码(代码或者项目是在服务器的仓库repository里存放)
客户端 可以向服务器提交、从服务器下载最新的代码(检出checkout)、修改后提交(commit)
检出(checkout)
提交(commit)
客户端和服务器端通过svn这个私有的协议交互
svn://
每当版本库接受了一个提交,文件系统进入了一个新的状态,叫做
一次修订(revision),每一个修订版本被赋予一个无一无二的自然数,
一个比一个大,初始修订号是0,只创建了一个空目录,没有任何内容.
全局修订号:不像其他版本控制系统,svn的修订号是针对 整个svn目录树
的,不是针对特定文件的. 和cvs有较大差别
cvs: 每个文件都有1.0 1.1 1.2
svn :全局的 只有一个文件修改 修订号就改
二.下载并安装
1.下载svn-1.4.4
官方网站 http://subversion.tigris.org/
2.安装svn-1.4.4
(1)svn需要找到apache服务器 所以先装 apache_2.0.63-win32-x86-openssl-0.9.7m.msi
一路下一步
注: apache web目录在 htdocs下
(2)安装svn-1.4.4-setup.exe
一路下一步
3.准备工作和验证安装是否成功
将bin路径放置到path下
在cmd下输入svn验证是否安装完毕
出现 使用”svn help”得到用法
就是安装好了
常用命令
svnserve.exe svn服务器
svnadmin.exe 管理
svn.exe 客户端
三.仓库的创建和导入项目等
1.在服务器端创建仓库并启动svn服务器
c:\ 建立svn文件夹
svn文件夹下 建立repository文件夹
(1)在服务器端创建一个仓库
svnadmin create c:\svn\repository 把repository文件夹当成仓库
没出现提示表示创建成功
(2)启动svn服务器(服务器可以监听客户端的请求)
在命令行中输入如下命令:
svnserve -d -r c:\svn\repository 启动svn服务
让svn将此目录作为仓库,并侦听客户端的请求.
-d 为后台模式
-r 指定服务器的仓库路径
d daemon 后台进程
r repository 仓库
注意:不要关控制台 关了svn服务器就停了(可以通过查看svnserve进程来看服务器是否关闭了)
2.从客户端向服务器端import项目
建立 c:\svnclient\project1 文件夹
将project1作为一个项目
project1里面 建立
test目录
test.txt(模拟代码*.java)
将项目导入到服务器(仓库里),使用客户端命令svn,例如 svn import svn://localhost
演示代码:
cd svnclient 进入项目所在的路径
svn import svn://loclahost 将svnclient文件夹下的项目导入到svn服务器上,localhost为svn服务器的ip地址
问题1:出现一系列警告(没有成功)
svn:E205007:无法使用外部编辑器获得日志信息…
svn:E205007:没有设置SVN_EDITOR
原因:svn要指定日志变量SVN_EDITOR,用来保存日志
所以我们需要新建环境变量SVN_EDITOR
变量名:SVN_EDITOR
值:notepad
新建完毕以后从新启动cmd才生效
从新输入
cd c:\svnclient
svn import svn://localhost
*出现一个记事本
–此行及以下内容将会被忽略–
A
A表示Add
关了该记事本
控制台出现
日志信息未修改,或未指定
a>终止,c>继续,e>编辑:
选c 继续
问题2:
svn:E170001:认证失败
原因:我们没有指定好用户的用户名、密码,svn要保证
拥有权限的用户才能提交项目、检出项目,不能让任何人
提交、检出项目
*********设置权限***********
c:\svn\repository\conf
svnserve.conf 打开这个文件
匿名访问,不需要用户名就可以读
anon-access = read
授权访问,有权限才能写
auth-access = write
anon-access = read 的#去掉 这样可以匿名可以读了
不过现在客户端也只可以匿名读,我们的import操作是写操作,
所以我们在此行下增加一行 anon-access = write
最终
anon-access = read
anon-access = write
修改完毕以后 停掉服务器 重新启动(启动时会从新读取配置信息)
再重新把客户端的项目导入到服务器
svn import svn://localhost
关闭弹出来的记事本
日志信息未修改,或未指定
a>终止 c>继续 e>标记
选择c,出现以下提示
增加project1
增加加project1\test
增加加project1\test.txt
提交后的版本为1
3.在服务器端创建虚拟路径
导入的项目会放在svn服务器某个默认目录,如果再导入一个项目默认放到
这个目录就乱了,所以要在服务器端创建虚拟路径,以后在客户端导入
项目时,把项目导入到指定虚拟路径下即可
如何创建虚拟路径
svn mkdir svn://localhost/zzy
虚拟路径看不出来
实质存到一个单独的文件中 db\revprops db\revs中
和cvs不一样(svn是将整个项目放到一个文件中)
再导入另一个项目
新建svnclient2文件夹 在此文件夹下建立project2项目
cd c:\svnclient2
svn import svn://localhost/zzy
import项目时每次都出现一个文本文件很麻烦 如何解决(可以不做这个练习)
首先去掉SVN_EDITOR环境变量
在c盘下建立log.txt
svn commit hello.txt -f c:/log.txt
这样就不会每次输入完命令 弹出文本文件再关闭了
四.使用checkout检出项目
把项目checkout到指定目录svnclient3
cd c:\svnclient3
svn checkout svn://localhost/zzy
*取出指定版本
先查看帮助 svn help checkout
svn checkout -r 4 svn://localhost/zzy 检出版本4
五.客户端修改项目后 从新提交到服务器
修改项目中的test.txt文件后
cd c:\svnclient3\zzy\project2\test
svn commit test.txt
如果提交时 提示锁定
可以使用svn cleanup 清除锁定后 再提交就行了
可以在另一个svnclient4文件夹检出一下刚提交的project2看一下是否提交成功
六.更新 update
从服务器下载最新的文件(不是第一次下载)
第一次下载叫检出checkout
例如客户端4 更新了文件test.txt 然后提交到服务器上
客户端3可以使用如下命令更新
cd c:\svnclient3\zzy\工程名
svn update test.txt
更新算读操作
七.检索出jboss的源代码
http://anonsvn.jboss.org/repos/jbossas/
1.c盘 新建jboss文件夹
2.
cd jboss
svn checkout http://anonsvn.jboss.org/repos/jbossas/
八.svn高级操作 权限管理
用户名和密码在 svn\repository\conf下的三个文件中
svnserve.conf
authr
passwd
把svnserve.conf中的这两行都注释掉
anon-access = read
anon-access = write
1.把svnserve.conf文件中的这行注释打开
password-db = passwd
2.在passwd中指定用户名和密码
zhangsan = 123
lisi = 456
注意:在一次登录后,SVN会将我们的登录信息保存起来存放在硬盘上的文件中,
其存放位置为:C:\Documents and Settings[您的登录系统用户名]\
Application Data\Subversion,如果想要删除该信息,只需要将该目录中
的auth文件夹删除即可.
如果把auth删除掉,下次还要从新输入用户名、密码
3.客户端可以修改test.txt 然后重新commit 这时需要输入用户名和密码
****TortoiseSVN的使用*******
一.什么是TortoiseSVN
TortoiseSVN(图形化的SVN客户端)
Tortoise乌龟的意思
TortoiseSVN-1.6
这个客户端可以标示哪个文件是新增的、改过的等等
随便在一个目录上单击右键会多出两个选项
SVN Checkout
TortoiseSVN
说明它已经和资源管理器进行了集成
二.使用TortoiseSVN
(一)服务器端
创建一个仓库并启动
(二)客户端
1.新建一个工程导入
客户端新建 c:\myclient文件夹
在里面建立
test.txt
test2.txt
可以在工程右键(也可以进入工程后 在空白处右键)—选择TortoiseSVN–import
URL of repository:
MiddleBk 为虚拟路径名
输入用户名和密码即可
2.从服务器上检出项目
新建myclient2文件夹 在myclient2文件夹右键-SVN checkout
Checkout Depth
Fully recursive(完全递归 目录和子目录都会导出) 不需要改
对勾表示项目已经和服务器关联起来了
3.修改文件并提交
修改过的文件 会变成 红色感叹号! 右键-SVN commit 提交后又变成绿色
4.新建文件test3.txt 加入到工程
TortoiseSVN-add
新增加的项目是 用 + 号图标表示
增加完后还要提交一次才可以哦!!
5.不想让匿名用户读取服务器上的文件anon-access = none
6.删除文件
客户端中删除一个文件(例如test3.txt)后可以在空白处右键-提交
服务器里的该文件也没有了
解决TortoiseSVN不显示绿色图标问题
*****svn整合Apache********
整合后,使用浏览器访问仓库
安装apache服务器
整合后apache的权限管理比svn服务器本身的权限管理更好、粒度更细
Apache 不是指Apache tomcat
Apache是一个应用服务器(搜狐、新浪都是用的Apache)
拉到下面找到HTTP Server超链接 点击该链接
Download !
from a mirror 点击该超链接
选择apache2.0
complete list of mirrors
archive download site 归档下载站点
binaries-win32
下载apache 2.0.63-win32-x86-openssl-0.9.7m.msi
安装Apache Http Server
admin.com
admin.com
admin@admin.com
选择第一个
for All Users,on Port 80,as a Service–Recommended.
安装完apache服务器 在服务管理器中启动Apache服务
右键桌面apache图标–Open Apache Monitor
start后监听本机的80端口了
客户端浏览器输入http://localhost/
出现:
这不是你想看见的页面吧?
apache安装成功
apache能集成各种各样的功能,如何集成功能?
答:以模块化的形式集成
在apache的如下目录中集成功能
C:\Program Files\Apache Group\Apache2\modules
svn和apache服务器集成
1.把svn的两个so文件拷贝到apache的 modules目录下
svn的so文件所在路径为 C:\Program Files (x86)\Subversion\bin
mod_dav_svn.so
mod_authz_svn.so
这两个文件为svn和apache整合的必须的文件
但这样放进去不会被apache自动识别出来
还需要在apache里面配置一下
找到%apache安装路径%\conf\httpd.conf
找到145 146两行(apache2.2在83 84行)把前面的#去掉
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
2.在174行加入(如果安装完后自动帮你加上就不用加了)
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
3.
在最后一行加入