umSVN服务器安装
关于SVN是什么以及应用这里就不详细说了。详细可以查看svn手册。里面说的挺详细的。这里主要是讲服务器的安装和用户权限分配以及项目管理。
安装步骤:
一) 执行svn-1.4.5-setup.exe服务器安装文件。安装到指定的目录。
二) 将SVNService压缩包中的SVNService.exe copy到服务器安装目录中bin目录下。
三) 将SVN注册为服务。选择开始->运行. 输入cmd回车,进入命令行界面. 进入你的SVN服务安装目录中bin目录下。输入 SVNService -install 回车.
四) 进入服务管理程序。找到svnservice。启动服务。(默认端口为:3690)
五) 服务启动成功,安装结束。
管理项目和创建版本库需要客户端去完成这些操作。在这里要先安装客户端。才能创建版本库。
创建版本库:
一) 在指定硬盘下创建一个空文件夹作为版本库的文件管理Repository的主目录。这里比方在E: \SVNRepo\sky创建了一个sky的空文件夹。我们把这个文件夹作为Repository的主目录。
二) 进入E: \SVNRepo\sky下点击鼠标右键。找到TortoiseSVN选项,选择TortoiseSVN列表中的第三个选项(在此创建版本库),点击后会出现如下界面:
这里有两种版本库类型,一种是文件系统存储方式,另一种是Berkeley数据库类型。这两种都有自己的优点和缺点。在这里。我们只要把它们认为都是存储文件数据的类型就行了。具体优缺点可以参考:http://blog.csdn.net/sprwig/archive/2008/12/08/3473639.aspx该网站的信息。(不管选哪种创建版本库,版本库的配置和管理都是一样的)
在这里。我们选择本地文件系统创建版本库。点击确定。
在E:\SVNRepo\sky 文件夹下面会生成以下文件,如图:
说明版本库创建成功。
三) 添加用户
在\SVNRepo\sky 文件夹下面找到conf文件夹。进入找到passwd文件添加保存用户名和密码.格式为:(用户名=密码)
[users]
# harry = harryssecret 键值对的方式
# sally = sallyssecret 键值对的方式
admin=admin
wangchuxiao=wangchuxiao
lxy=lxy
这里我们采用明文的方式添加了三个用户并分别给他们添加了密码。
用文本编辑器打开svnserve.conf,向其中添加
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
第一句表示:不允许匿名用户访问
第二句表示:已通过了认证的用户可以进行读和写的操作
第三句表示:指定用户密码管理文件
第四句表示:指定权限管理文件
测试用户是否添加成功
首先启动SVN服务,然后在任意地方点击鼠标右键选择TortoiseSVN在 列表中选中第一个选项版本浏览器(RepoBrowse),会出现如下界面:
在URL中输入:svn://127.0.0.1/SVNRepo/sky 其中svn:// 表示svn协议,端口为3690,127.0.0.1表示本机的IP地址,SVNRepo/sky是本地的版本库主目录文件夹名称。输入后点击确定,会出现如下界面:
出现该界面后,如果在某文件夹下出现Error * Can’t connect to host ip 目标机器不能连接的错误,那就说明你服务未启动。
如果没出现该错误,就会弹出一个认证对话框,要求输入用户名和密码进行认证。当输入错误的用户名和密码的时候,SVN服务会一直响应这个认证的界面要求认证,如果输入正确的用户名和密码。后,该界面会自动消失。那就表示你登陆成功了。恭喜您。成为SVN中的一员了。
四) 导入工程到版本库进行版本管理
1)这里选一个测试工程,test_factory这个工程是一个web工程,里面有很多类文件和jar包文件。我们现在把这个工程导入到版本库中进行中进行管理。
2)选择该工程,单击右键,找到TortoiseSVN选项,选择列表中出现的第四个导入工程选项。点击后会出现如下界面:
这里首先有一个版本库URL地址。有两种方式输入该地址,第一种就是我们刚才输入的
svn://127.0.0.1/SVNRepo/sky 这个URL地址。第二种,就是点击右边的按钮选择你E盘下的SVNRepo/sky(版本库仓库主目录) 这个文件夹。
点击最近信息按钮会出现你以前导入了其他工程的一个日志记录。所以下面那个白色区域就是记录日志信息的。可输可不输。建议输入日志信息,以便日后查看,点击确定后出现如下界面:
这里如果全部导入完后,确定按钮才能点击,整个事务才成功完成。所以在操作这一步的时候,千万不要点击取消按钮。点击取消,整个事务就会回滚。
3)查看导入的工程文件
在任意地方点击鼠标右键选择TortoiseSVN在 列表中选中第一个选项版本浏览器(RepoBrowse), 在URL中输入:svn://127.0.0.1/SVNRepo/sky 点击确定,查看该版本库下的文件。出现如下界面:
我们会发现我们刚才导入的test_factory这个工程的文件虽然都已经成功导入到版本库中,但是文件分布在版本库中杂论无序。如果多个项目都以这样的方式导入到版本库。那管理这个版本库的人将会很难确认和分辨文件。
所以下面就讲项目文件工程管理。
五) 项目文件工程管理
一般一个工程主要是创建三个目录分别为:trunk(主干)、tags(标签/标记)、branches(分支)。 tags和branches下一般为根据需要从trunk目录拷贝过来的。
创建这些文件的目录我们可以直接在版本库浏览器中创建包括文件的改名和删除。(这些操作在版本浏览器中点击右键可进行操作)
创建步骤:
1) 创建test_factory工程文件夹。
2) 在test_factory工程文件夹下面分别创建trunk、tags、branches三个目录,trunk主干目录主要存放工程的源文件。Tags存放工程的标签文件 branches存放工程的相关信息文件。这里分细一点还可以创建一个lib文件,专门存放工程的.jar包。
3) 创建后出现的界面如图:这里先把刚才上传的文件删除。
现在目录结构就很清晰了。下面我们重新导入刚才的工程。
这次我们将主文件导入到test_factory下的trunk目录中,将jar文件导入到test_factory_lib中。
导入工程和前面第四步有一点点不同,就是选版本库文件地址,这里应该是选择到svn://192.168.1.113/svnRestor/sky/test_factory/trunk 这个目录下。
Lib目录的地址为:
svn://192.168.1.113/svnRestor/sky/test_factory/test_factory_lib
导入完后,界面为:
结构是不是清晰多了。
六) 用户权限分配和管理
在团队开发模式下。有些操作是不能让开发人员去管理的。这里现在讲的是项目工程的权限分配管理。
1) 到E:\SVNRepo\sky 文件夹下面找到conf文件夹。进入找到authz文件,打开编辑文件。这里讲权限的分配主要是针对某个目录的分配管理。因为在SVN中都是基于文件管理的。
2) 下面是一个文件授权的配置。
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to a
### single user, to a group of users defined in a special [groups]
### section, or to anyone using the '*' wildcard. Each definition can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').
###对目录的授权定义,
###可以针对一个单一用户授权,也可以针对在[groups]里面定义的一个组授权,还可以用*通配符来对所有的用户授权,
###授权的选项有:只读访问('r'),读写访问('rw'),或者无权防问('').
###authz文件中可以对任意多个目录进行权限控制
#*表示所有用户
[groups]
harry_and_sally = harry,sally
#设定权限组
#根目录下,admin有读和写的操作
[/]
admin= rw
#/sky/BlogOnline目录下,用户wangchuxiao 和tongtong 只有读的操作
[/sky/BlogOnline]
zhangsan = r
lisi= r
# [/foo/bar]
# harry = rw
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
4) 打开我们的authz文件,添加授权操作。这里打个比方,我们对刚才导入的test_factory工程,除了管理员有读和写的操作外,其他人都只具有读的操作。也就是不能修改该工程的任何信息。
在文件后面我们添加如下代码即可:
[/sky/test_factory]
zhangsan = r
lisi= r
admin=rw
保存该文件,重启svn服务器。(这个测试需要两台PC才能测试出结果)
SVN客户端安装
服务器版本库的创建和项目的管理都是由客户端操作完成的。
安装步骤:
一) 装客户端,执行文件:TortoiseSVN-1.4.3.8645-win32-svn-1.4.3(1).msi,安装到指定的目录。
二) 安装完成后执行LanguagePack-1.4.3.8645-win32-zh_CN.exe把客户端进行汉化。
客户端汉化界面:
这个界面,是通过选择TortoiseSVN,找到第六个选项setting(设置),点击进入,会出现以上界面。选择语言,中文,点确定。就进行汉化了。默认没装语言包情况下。只有英语一种语言选择。
这里。还可以进行一些其他设置。包括界面和常规设置。
Eclipse安装方式安装SVN插件客户端连接SVN服务器
一)启动Eclipse开发工具。在Help中找到software update找到Find and Instal软件更新,查找并安装。如下界面:
选择第二个,点击下一步。出现如下界面:
二)选择New Remote Site新建远程站点。如下图:输入图中信息
因为我这里已经存在了。所以会出现警告信息。
点击OK。选择Finish,后面就是选择要安装的插件。默认都选。去除不能选的插件。点击下一步就OK了。插件装好后,在Eclipse中会出现一个
SVN Repository Exploring
Team Synchronizing
点击SVN Repository选项。单击右键,选择New Remote Location连接SVN服务器。
新建远程地址,我们这里为:svn://127.0.0.1/SVNRepo/sky
点击OK。就行了。
下面就是check out项目了。
第二篇:svn安装配置
一、首先是工具包的下载,网上看了好多,都是旧版本的,可是随着新版本的发布,我们要勇于创新是不,不多废话,版本工具包如下:
apr-1.2.12.tar.gz
apr-util-1.2.12.tar.gz
httpd-2.2.6.tar.gz
subversion-1.6.12.tar.gz
subversion-deps-1.6.12.tar.gz
二、软件安装:
1、安装apr-1.2.12
# tar –zvxf apr-1.2.12.tar.gz
# cd apr-1.2.12
# ./configure /* 安装不指定路径时 默认安装到/usr/local/apr
# make ; make install
2、安装 apr-util-1.2.12
# tar –zvxf apr-util-1.2.12.tar.gz
# cd apr-util-1.2.12
# ./configure - -with-apr=/usr/local/apr
# make ; make install
若安装时出现 /usr/lib/libexpat.so: could not read symbols这个问题, 主要原因是libexpat的兼容性,特别对是64bit服务器的兼容性。现在新的服务器基本都采用64位了,但是默认的/usr/lib/库是32位的,64位的库默认在/usr/lib64/目录下,解决办法是将/usr/lib64/目录下的 libexpat.a、libexpat.la libexpat.so 文件拷贝到/usr/lib/目录(cp /usr/lib64/libexpat.* /usr/lib/)
3、安装 httpd-2.2.6.tar.gz
# tar –zvxf httpd-2.2.6.tar.gz
# cd httpd-2.2.6
# ./configure
- -prefix=/usr/local/apache
- -with-apr=/usr/local/apr/bin/apr-1-config
- -with-apr-util=/usr/local/apr/bin/apu-1-config
- -enable-modules=so /* DSO模式安装apache (或 --enable-so)
- -enable-dav
- -enable-maintainer-mode
- - enable-rewrite
# make ; make install
安装好后,与httpd做链接(ln),或者拷贝过去:即
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
apache的默认端口是80,如果要修改端口号,可以到/usr/local/apache/conf/httd.conf文件中,把Listen 80中的80,修改成你想要的端口号。
启动apache
# /etc/init.d/httpd start
如果第一个启动出现:Starting httpd: httpd: apr_sockaddr_info_get() failed for MYHOST httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName,这个问题是没有在 apache的配置文件/conf/httpd.conf 中设定 ServerName , 所以它会用主机上的名称来取代,首先会去找/etc/hosts中有没有主机的定义 。
解决方式: 1.设定 ServerName 2.在 /etc/hosts 中填入主机名MYHOST:
127.0.0.1 localhost.localdomain localhost MYHOST
然后,重新启动,正确。哈哈
若出现 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80这个问题说明80端口被占用,用netstat -nlp |grep :80命令看看有什么进程占用了80端口,发现是httpd进程。killall -9 httpd杀掉所有的httpd进程后,用service httpd start命令重启apache服务器,发现现在能够正常重启,不会出现上述问题
4、安装和配置 subversion
#tar –zvxf subversion-1.6.12.tar.gz
#tar –zvxf subversion-deps-1.6.12.tar.gz /*这两个自动解压成一个包 subversion-1.6.12 #cd subversion-1.6.12
#rm –rf apr
#rm -rf apr-util
注意:SVN 依赖的APR版本要正确。如果Apache为2.0.x,对应的APR版本应为0.9.x;Apache为2.2.x,对应的APR版本应为1.2.x。 由于subversion-deps包里的APR是0.9.x的,因此编译svn时要删除从deps里解压出来的apr, apr-util,改而使用apache 2.2里提供的。(这里指定为开始安装的apr目录),这一点知识非常重要,自己之前多次安装都没成功,现在才明白是在这一点被卡住了,但最终还是被我解 决了, 学习,和不断实践 会使你不断成长!
#./configure
--prefix=/usr/local/svn
--with-apxs=/usr/local/apache/bin/apxs
--with-apr=/usr/local/apr/bin/apr-1-config
--with-apr-util=/usr/local/apr/bin/apu-1-config
--with-ssl
--with-zlib(如果出现错误,说zlib需要参数,可以直接把这句忽略)
--enable-maintainer-mode
#make
#make install
确定一下svn有没有安装成功
#/usr/local/svn/bin/svnserve - -version
会看到相关版本信息!
完了再看看apache(/usr/local/apache/conf/httpd.conf中) 的相关模块有没有加载!如下! LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
三.svn配置
1. 建立一个目录作为SVN代码库管理的根目录(例:/home/svnadmin/svnsources/),只是一个普通目录;
2. 在 SVN代码库管理的根目录下(/home/svnadmin/svnsources/)下建立一个代码库(repo),名称为testrepo:
svnadmin create /home/svnadmin/svnsources/testrepo
3. 启动svn自带的svnserve服务供网内其它计算机使用:
svnserve -d -r /home/svnadmin/svnsources
此时便可以在局域网中通过svn://192.168.0.142/testrepo来访问testrepo这个代码库的内容
了
注:可以加--listen-port参数来指定端口(默认为3690),如:
svnserve -d --listen-port 3691 -r /home/svnadmin/svnsources启动服务
然后在局域网中通过svn://192.168.0.142:3691/testrepo来进行访问
4. 用户权限的管理(以下配置只对通过svnserve提供的服务有效):
①、首先修改svnserve.conf,将注释打开如下:
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
注:anon-access 未认证用户(简配为none,否者认证用户查看日志还需增加一些设置) auth-access 经认证用户
password-db 指定用户及密码的配置文件,可以是相对路径
authz-db指定用户权限的配置文件,可以是相对路径
②、配置passwd文件:
在[users]字段下增加用户及密码,例:
[users]
gli = 123456
sli = 123456
szhang = 123456
注:空格不能省略
③、配置authz文件:
[aliases]
joe = DC=red-bean, Joe Average
[groups]
manager = gli
developer = sli
[/]
* =
$anonymous =
$authenticated = r
szhang = r
&joe = r
@developer = r
@manager = rw
[testrepo:/]
* =
$anonymous =
$authenticated = r
szhang = r
&joe = r
@developer = r
@manager = rw
注:[aliases]字段为别名
[groups]将用户归类到组
[testrepo:/]指定具体目录的用户权限,可以为组,也可以为单独用户;组前以@开头,别名用户以&开头,单独用户不需要加前缀;*表示其他用户,$authenticate代表验证通过的用户,$anonymous代表未验证通过的用户。权限有rw、r和空,空表示没有任何权限。这里的路径[/]表示版本库根目录(svnserve时指定的路径),然后具体的版本库需写明路径,如[testrepo:/],需注意的是testrepo是一个版本库,其位于svn版本库根目录下,不可以写成[/testrepo:/]或[./testrepo:/],及版本库名之前为具体的linux下存放路径(如另一个版本库
[mtk/mt6575:/]),另外由于版本库里面的内容目录结构是受SVN数据库管理的,不同于linux直接的文件目录,故需加[:/],例如需对testrepo版本库里的trunks分支增加权限控制,应写成[testrepo:/trunks/]
注:当[anon-access = read]将导致认证用户无法获取日志,此时设为[anon-access = none]即可。 导致认证用户无法获取日志可能是由于先检测到anon-access为可读,所以就以anon-access身份读取日志,但authz配置里又没有给anon-access权限,所以读取日志是权限不够
四.Svn在linux下的应用
1. 建立一个目录(例:/home/gli/projectImport),把代码放置到主干(trunks)下,如project为一份需要管理的代码:
projectImport
|--branches
|--tags
|--trunks
|--project
2. 然后将这个目录(/home/gli/projectImport)导入到testrepo中去管理:
Svn import -m"init testrepo" /home/gli/projectImport/ Po/
注:--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--non-recursive (-N)
--username USER
--password PASS
--no-auth-cache
--non-interactive
--force-log
--editor-cmd EDITOR
--encoding ENC
--config-dir DIR
--auto-props
--no-auto-props
--ignore-externals
3.从版本库中取出一个工作拷贝用于开发
本地:svn checkout file:///home/svnadmin/svnsources/testrepo/branches/project /home/gli/project
网内:svn checkout svn://192.168.0.142/testrepo/branches/project /home/gli/project 或svn checkout svn://ubuntu/testrepo/branches/project /home/gli/project
简写:svn co 4.到拷贝出的工作区进行代码修改,修改后的提交和合并命令如下:
提交:svn commit -m “add test file for my test“ test.cpp
简写:svn ci
合并:svn merge -r 200:205 test.cpp(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
两版本之间差异的比较:svn diff –r 2:3 test.cpp
查看文件的详细信息:svn info test.cpp
查看日志(显示这个文件的所有修改记录,及其版本号的变化):svn log test.php 查看文件或者目录状态:svn status test.cpp
更新到某个版本:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.cpp(将版本库中的文件test.php还原到版本200) svn update test.cpp(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
向代码库中添加新文件:svn add test.cpp