SVN安装配置,权限配置,常用命令

来源:互联网 发布:黑马java就业班视频 编辑:程序博客网 时间:2024/04/29 17:36

1、SVN服务简介:  较详细的看网址:http://www.cnblogs.com/liuzhong/archive/2011/07/10/2102634.html     pdf文档:Subversion中文手册(自己google下浏览下也有好处)

  Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

 

SVN中的一些概念 :

1. repository(源代码库)

       源代码统一存放的地方

2. Checkout(提取)

       当你手上没有源代码的时候,你需要从repository checkout一份

3. Commit(提交)

       当你已经修改了代码,你就需要Commit到repository

4. Update (更新)

       当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更 

 

       日常开发过程其实就是这样的(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) -->作出自己的修改并调试成功 --> Commit(大家就可以看到你的修改了) 。

       如果两个程序员同时修改了同一个文件呢,  SVN可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN会提示文件Confict, 冲突,需要手动确认。

 

客户端软件:

       (1)Windows下常用的客户端软件常用TortoiseSVN。它是一个免费的开源的客户端。 下载地址:http://tortoisesvn.net/downloads.html

       (2)向Myeclipse,也有一些SVN的插件。

        ( 3 )  安装完自带的svn客户端。主要用于命令行。


2、SVN安装(yum 安装)

源码包安装参看网址:http://www.cnblogs.com/xd502djj/archive/2011/01/21/1941404.html


yum 安装方式:

yum  list all | grep -i subversion  #查看是否有相应的安装包,如果不是你想要的版本。请自行查找yum源或者直接进行源码包编译安装。

yum install subversion -y --nogpgcheck  #没安装的话安装上即可

rpm -ql subversion #查看下相关文件的安装目录

svn --version #查看下是否安装成功


3、创建版本库

mkdir /usr/local/src/svnproject/ -p  #新建一个目录(目录随意),用于版本库的创建。

svnadmin   create   /usr/local/src/svnproject/   #建立svn版本库,可以去看看目录下生成了那些文件。

vim /usr/local/src/svnproject/conf/svnserve.conf   #打开配置文件添加下列选项

[general]
anon-access = none #非授权用户无法访问
auth-access = write #使授权用户有写权限
password-db = passwd #密码文件路径,刚才创建的版本库 /usr/local/src/svnproject/ 下边的conf目录下的文件(直接写上名字就行,不用跟路径。它会自动找到这个文件)。
authz-db = authz #访问控制文件,就是配置哪些用户(passwd文件中定义的用户)对那些目录(/usr/local/src/svnprojec或者它的子目录)有那些权限(读写权限)
realm = svnproject #认证命名空间,就是你的代码版本库的路径



vim /usr/local/src/svnproject/conf/passwd  #建立用户名和密码。注意顶格写
[users]
lidonghai=123
lucy=123
kate=123



vim /usr/local/src/svnproject/conf/authz #定义用户组及各个组用户对目录的访问权限设置

[groups]  
admin=lidonghai           #这个组只有lidonghai这一个用户。多个用户用逗号隔开即可。这里为简单。
team1=lucy                   #这个组只有lucy
team2=kate                   #这个组只有kate组

[/]                                # “/”符号代表的就是代码版本库/usr/local/src/svnproject。
* =                              #其他用户对这个代码库没有任何权限。(但是它的子目录是可以配置的)
@admin = rw              #admin组即用户lidonghai对整个代码库“/usr/local/src/svnproject”具有读写的权限(包括下边的子目录)

[/project1]                  #代表代码库/usr/local/src/svnproject/下的project1目录。(project1这个目录不是你手动创建的,是需要管理员帮你导入生成的--见下边。之后你才可以对这个目录进行操作,比如check out下来。添加文件add。update下来。)
@team1 = rw            #team1组即lucy这个用户对/usr/local/src/svnproject/project1目录有读写权限

[/project2]                  #解释同上
@team2 = rw




4、启动svnserver 服务

svnserver -d -r /usr/local/src/svnproject         #-d 表示后台启动。-r表示指定代码库路径

netstat -tulpn  #查看下3690端口是否开启







5、使用代码版本库

参看网址:这些都是如何使用。下边总结的如何上传你的本地代码。check out 到本地。

http://www.jb51.net/os/RedHat/2461.html

http://www.cnblogs.com/liuzhong/archive/2011/07/10/2102634.html

http://www.cnblogs.com/liwanggui/archive/2016/06/28/5624147.html


5.1管理员导入代码创建文件夹,下边给出了命令行的方式。不习惯的话可以私用图形工具进行导入(Windows下常用的客户端软件常用TortoiseSVN)。

#下边两种方法认证时使用的就是上边配置的用户。

svn import  -m"" phptest/ file:///usr/local/src/svnproject1 --username lidonghai  #在本机上导入。导入完后其实你的phptest这个本地目录就没什么用了。删掉也可以。(和svn服务没啥关系了)

svn import -m "" phptest/  svn://127.0.0.1/project1 --username  lidonghai   #用户名是管理员才可以导入生成,lucy和kate是不能导入的。


#这种导入方式认证的方式不使用上边的配置。具体怎么认证下边会给出。

svn import -m "" phptest/ http://127.0.0.1:8080/svn/project3 --username admin  #这是svn配置成http访问方式后才能使用的导入方法(http方式访问svn的配置方法稍后给出)。注意要关闭防火墙并且关闭selinux,否则可能导出时没有权限。关闭防火墙:service iptables stop    关闭selinux: setenforce 0 。(临时关闭,永久关闭 vim  /etc/selinux/config ; 将SELINUX=enforcing改为SELINUX=disabled)


5.2删除创建的文件夹:

#对应上边的创建方式

svn delete  -m ""  file:///usr/local/src/svnproject1 --username lidonghai
svn delete -m "" svn://127.0.0.1/project1 --username  lidonghai      

#对应上边的创建方式

svn delete  -m "" http://127.0.0.1:8080/svn/project1 --username admin


5.3check out到本地,就是从服务器拷贝一份代码到本地开始开发。

svn checkout file:///usr/local/src/svnproject1/project1 --username lidonghai

svn checkout   svn://127.0.0.1/project1 --username  lidonghai 

#这个是基于http服务的,使用的时候请确保你已经配置了svn的http访问方式。

svn co  http://127.0.0.1:8080/svn/project1 --username admin


5.4其他的常用命令就可以自己参考上边网址中的,自己测试感受下。

举例:

添加新文件

svn add 文件名注:告诉SVN服务器要添加文件了,还要用svn commint -m真实的上传上去!例子:svn add test.php <- 添加test.php svn commit -m “添加我的测试用test.php“ test.phpsvn add *.php <- 添加当前目录下所有的php文件svn commit -m “添加我的测试用全部php文件“ *.php

提交

svn commit -m “提交备注信息文本“ [-N] [--no-unlock] 文件名svn ci -m “提交备注信息文本“ [-N] [--no-unlock] 文件名必须带上-m参数,参数可以为空,但是必须写上-m例子:svn commit -m “提交当前目录下的全部在版本控制下的文件“ * <- 注意这个*表示全部文件svn commit -m “提交我的测试用test.php“ test.phpsvn commit -m “提交我的测试用test.php“ -N --no-unlock test.php <- 保持锁就用–no-unlock开关svn ci -m “提交当前目录下的全部在版本控制下的文件“ * <- 注意这个*表示全部文件svn ci -m “提交我的测试用test.php“ test.phpsvn ci -m “提交我的测试用test.php“ -N --no-unlock test.php <- 保持锁就用–no-unlock开关

更新文件

svn updatesvn update -r 修正版本 文件名svn update 文件名例子:svn update <- 后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本svn update -r 200 test.cpp <- 将版本库中的文件 test.cpp 还原到修正版本(revision)200svn update test.php <- 更新与版本库同步。            提交的时候提示过期冲突,需要先 update 修改文件,            然后清除svn resolved,最后再提交commit。更新的流程:只要你修改了文当,更新的时候就会查看svn服务器上与你本地的那个版本是否一致。如果一致,代表其他人没有修改过这个文档。那你的更新就生效了,文档版本加1。如果比提交的时候服务器上的版本和你本地修改的文件版本不一致,代表已经有人修改了你的文件。这时svn服务器是不会接受更新的。因为不能轻易就覆盖掉被人的更改,这时一般会update那个有冲突的文件并修改冲突(update这个文件时有多个选项自己测试下就行,随便测试没关系,即是出错也是可以返回之前的版本的。一句话随便搞不用怕,错了就返回到之前的版本。记住如果冲突不好解决要和修改你文件的人商量下,看看双方是不是都能接受最后的更改结果。杜绝不和他人交流直接覆盖别人的代码。)。


删除文件

svn delete svn://路径(目录或文件的全路径) -m “删除备注信息文本”推荐如下操作:svn delete 文件名 svn ci -m “删除备注信息文本”例子:svn delete svn://localhost/testapp/test.php -m “删除测试文件test.php”推荐如下操作:svn delete test.php svn ci -m “删除测试文件test.php”


6、小结:上边的安装和使用命令都还比较简单。但是权限的配置没有多少人写得清楚。还有一点就是代码库的管理也是很少有人写清楚。

6.1SVN的认证方式有很多种,常用的有:

     svnserver服务器 ,上边的配置就是这种认证方式。

     svnserver over SSH ,这种方式我这里不介绍了。可以google下或者下载“SVN中文手册.pdf”熟悉下

     Apache的HTTP服务器,后边给出配置步骤。


6.2版本库的创建策略也有多种(我上边的配置解释使用的单一版本库不保存多个项目)

单一的版本库保存一个项目。#上边配置方式就是创建了一个版本库,版本库下边是各个project1 project2 project3等目录。(举例:你们公司这个项目需要多个部门配合,那么给程序员一个目录project1用于代码开发。给产品部一个目录project2用于产品文档ppt等文件的存储。给销售一个目录用于销售文件的存取。这不就很有调理了。各个部门相互不能干涉。只有你管理员有最高权限。除你之外没有任何人可以删除目录、创建目录。多牛逼呀。其他部门在各自的目录下爱干什么干什么,没你啥事情。你最多指导下就行了。)

单一的版本库保存多个项目。#和上边那种基本一样。其实上边那种“单一版本库保存一个项目”其实就是不分出 ”子目录”(project1、project2、project3)。大家都在一个目录里边。但我觉得那种方式太粗放了。而且不怎么安全。外衣又跟给你删除了整个代码库可就不好玩了。即使你创建一个project1子目录,可以解决误删除问题,但是感觉大家伙在一块还是比较乱。反正我不想和产品以及销售的文件放一起来瞎搞(说不定那个小姑娘就给你删除了文件,给你制造点麻烦。我感觉挺难受的)。


多个版本库。#这种方式也不错,挺实用的,多个项目版本库。和上边单一库分目录效果一样。配置也挺简单。上边的权限配置弄懂了这个配置小意思。

参看网址(步骤很清晰,注意里边的project1、project2不再是目录而是独立的版本库。):http://www.linuxidc.com/Linux/2014-01/95627.htm 



6.3  SVN基于httpd访问配置:简单,这里为了速度快直接用yum安装所有软件。

yum install -y subversion #安装svn服务器,安装过了不用安装了。

yum install -y httpd mod_dav_svn #安装httpd服务(安装过了就不用安装了),安装mod_dav_svn更能模块。前提是你的svn服务已经安装过了。

svnadmin create /usr/local/src/svnproject1 #创建版本库,创建过了就不用创建了。如果上边步骤做过了这一步没必要执行了。就用上边的版本库


vim /etc/httpd/conf.d/subversion.conf #配置httpd支持svn。(注意我下边的注释要去掉,要不会报错的。)

<Location /svn>                  #svn这个是httpd访问路径,下边看下就明白了。
    DAV svn
    SVNListParentPath on
    SVNPath /usr/local/src/svnproject1     #这个就是/svn目录,映射的版本库目录。  
    AuthType Basic
    AuthName "Authorization"
    AuthUserFile /usr/local/src/svnproject1/conf/password   #这个是你的账户文件
    Require valid-user
</Location>




htpasswd -c  /usr/local/src/svnproject1/conf/password  admin #创建账户文件,和上边配置文件subversion.conf中指定的文件路径和名字必须一样啊。

htpasswd -m  /usr/local/src/svnproject1/conf/password  admin2 #多开几个账户,注意这时不能使用-c选项。-m表示追加新用户到password文件

htpasswd -m  /usr/local/src/svnproject1/conf/password  admin3 #多开几个账户


chmod 755 -R   /usr/local/src/svnproject1  #更改文件夹权限。

chown -R apache.apache /usr/local/src/svnproject1 #更改属主和属组



vim /etc/httpd/conf/httpd.conf  #这一步随意

Listen 8080 #修改监听的端口。



service httpd restart #重启httpd服务

service iptables stop  #关闭防火墙,要不你访问不了。必须

setenforce 0 #关闭selinux,必须。要不你import时会报 permision deny错误。这个重要必须先关上。我他娘的调了半天(主要还是对selinux没有学习的缘故)。



http://192.168.99.239:8080/svn/  #放到浏览器中,试一下。看见这个/svn路径了吧,这个就会被映射为版本库路径。

svn import -m "" phptest/  http://127.0.0.1:8080/svn/project3 --username admin  #导入本地代码到版本库。phptest是我的测试目录。你可以什么都不加,默认导入当前目录下所有文件。






















0 0