Linux下搭建SVN服务端


  此博文记录了自己搭建svn的过程,为了简单的记录一下自己踩过的坑,及其想要记录的知识点,所以许多素材均取于网络,在博文后面我会附上所有的原文地址。

  搭建SVN的目的就是代码管理。主要分为三步:

  • 1,安装Linux上svn所需要的包
  • 2,搭建项目设置权限并启动
  • 3,在windows上(客户端)如何连接

前言:什么是SVN

  SVN 是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发一个项目,实现共享资源,实现最终集中式的管理。

  (前言内容均来自百度百科。SVN的简介)

1,版本控制

  一个软件开发试行后,最关键的问题就是能够有效地实现软件版本系统的控制,而作为版本控制系统的核心任务,能否完成成功的查阅历史操作记录和实现协同开发才是公司研发团队关注的问题。版本控制(Version control)是项目开发与管理的标准做法,能够追踪项目从开始到结束的整个过程,常被应用于软件程式开发。对于编程人员而言,版本控制技术是团队协作开发的桥梁,有助于多人同步进行大型程式开发。由于在多人协作开发的模式下,每个人都向服务器提交自己的文件,就可能存在着代码被多次修改、替换的风险,但是版本控制能够在每次更新操作后进行相应的记录。一旦发生误操作,开发者能够根据服务器中的版本记录,将项目恢复到出现问题之前的其他版本。因此,借助版本控制技术,软件开发项目可以被分割为若干模块,每个模块并行地进行开发工作,从而有效地提高了整体编程效率。

  版本控制技术对文件进行管理主要有两种模式:Lock-Modify-Unlock(锁-修改-解锁)和Copy-Modify-Merge(拷贝-修改-合并)。

  在Lock-Modify-Unlock工作模式下,若用户想对某文件进行修改,必须先锁定该文件再进行修改,修改操作完成之后再对其解锁。这种文档管理模式能够有效避免多人对某文件同时进行修改而造成的冲突,但是它减少了用户并发操作。除此之外,该模式还有一个非常明显的缺点,即如果前面的用户完成修改后,忘了对文件进行解锁操作,则会导致后面想修改此文件的用户将永远处于等待解锁状态。采用这种管理模式的版本控制工具主要有Visual Source Safe(VSS)。

  在Copy-Modify-Merge工作模式下,当某一用户想修改文件时,可以先将服务器文件update到本地端,然后在本地端对副本进行修改,修改操作完成后,再将副本commit到服务器。如果在此用户commit之前,原文件已经被其他用户修改并提交过,那么服务器上的版本号与本地端上的版本号不同,二者将产生冲突,服务器将中止提交。此用户只有将服务器上的新版本update到本地端,将其与自己修改的文件进行合并,才能重新commit到服务器。在实际编程中,文件的合并过程一般需要编程人员共同协商决定。这种“拷贝-修改-合并”虽然需要花费一定的时间,但却比“锁-修改-解锁”等待的时间短,能够增加操作的并发度,大大提高团队的编程效率。

  大多数版本控制系统采用的是第二种方式,如Concurrent Versions System(CVS)和Subversion(SVN),而这其中SVN是最为流行的版本控制软件,许多开源软件都采用了SVN作为源码版本控制服务器。在SVN版本控制软件的管理下,不管是在局域网还是在Internet上都可以对文件和目录进行管理,它突破了时间与空间的限制,促进了团队协作开发。

2,SVN 简介

  SVN的全称是Subversion,即版本控制系统。它是最流行的一个开放源代码的版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(Repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。

  SVN采用客户端/服务器体系,项目的各种版本都存储在服务器上,程序开发人员首先将从服务器上获得一份项目的最新版本,并将其复制到本机,然后在此基础上,每个开发人员可以在自己的客户端进行独立的开发工作,并且可以随时将新代码提交给服务器。当然也可以通过更新操作获取服务器上的最新代码,从而保持与其他开发者所使用版本的一致性。

  SVN的的客户端有两类,一类是基于Web的Web SVN等,另一类是以Tortoise SVN为代表的客户端软件。前者需要Web服务器的支持,后者需要用户在本地安装客户端,两种都有免费的开源软件供使用。SVN存储版本数据也两种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

3,SVN的工作机制

  SVN系统具体是如何实现对项目软件的版本控制,一方面通过实现历史操作记录查阅。在任意一台服务器中都可以添加一个SVN版本库,而相应的版本库中存放大量的程序和文档,而这些项目资源主要通过配置管理员依据不同的配置管理计划对不同项目的组员分配与之相符合的访问权限,进而实现对资源的统一管理;只有SVN标本过版本库中的资源,项目组成员可以对版本资源库中的资源进行访问。

  一次简单的访问过程包括:相关项目组员首先在客户操作端建立一个从版本库检索出来的项目文件,而后就可以对拷贝的档案进行修改,最后通过SVN提交命令将其修改后的项目文件提交到终端服务器,终端服务器最终会对修改后的项目文件做最后的综合更新记录。

  修改过的文件在修改未被提交到服务器前,SVN服务器只会对已经提交到网络端服务器的项目文档进行更新审核,并与其他人的合并,在此之前修改过的文档是保密的,提交之后SVN网络端服务器会将修改后与修改之前的数据进行比较,并在后台对修改内容就行标注显示,进而实现对历史操作记录的更新记载。最终实现项目组组员既能检索出旧版本,又能通过SVN实现新旧版本的对比,另一方面SVN通过进行组员间的协同开发实现对项目软件的版本控制。协同开发一般是指版本控制系统间接受并处理不同用户提交的各种不同性质版本的资源代码,同时允许各个用户之间在遵循相应规则范围内实现合作开发。如何处理好有矛盾的版本控制系统才是能够协同开发的关键,像是多个程序编码员同时对同一份资源代码进行修改、提交到SVN版本库,就有可能发生提交后的版本意见想法相冲等问题。

4,SVN的优势

1,存储

  SVN 服务器既有CVS所具有数据储存的优点,像是信息资源存储后会形成资源树结构,便于存储的同时,数据一般不会丢失,同时又拥有自己的特色。SVN是通过关系数据库及二进制的存储方式,同时解决了既往不能同时读写同一文件等问题,同时增添了自己特有的“零或一”原则。

2,速度

  与人们初始的CVS相比,SVN在速度运行方面有很大提升。因为SVN服务器只支持少量的信息,资源传输,与其他系统相比,更支持的是离线模式,因此避免了网络拥挤线性的出现。

3,安全性

  SVN是一种技术性更加安全的产品,实现了系统和控制两方面的结合。一方面可以将系统整体的安全功能有效的分布在分支系统中,进而保证分支系统能正常运行,从而使各分支系统能够互补,最终在系统整体性的安全性得以保障,通过均衡原则实现最终追求安全的目的。

5,SVN版次

  Subversion使用“偶数/奇数”版次模式。偶数编号的小数点版次(1.0、1.2等)被认为是稳定的版次。这样的版次只针对问题的修正才会变动,不会增加新功能,而且用户会期待使用的软件没问题。相反地,奇数编号的小数点版次(1.1、1.3等)是开发(development)版本。在这样的版本中会增加新功能,它们倾向于快速的变更与变革,且有可能会有使得数据遗失的缺陷或问题。如果稳定性与数据保存性对你而言是重要的,则你应该使用偶数编号的版次。只有在它具有一个重要及必须要有的功能而且你愿意承担风险时,才使用奇数编号的版次。

1,Linux安装svn服务器

  安装之前可以查看Linux服务器是否已经安装SVN服务,执行命令:svnserve --version

   以上说明此服务器中未安装SVN服务,如果没有安装,下面就来吧。

1.1  Linux离线安装svn服务

  首先下载相应的包,我下载了以下四个:

  地址如下:

subversion    下载地址:http://subversion.apache.org
sqlite           下载地址:http://www.sqlite.org
apr              下载地址:http://archive.apache.org/dist/apr
zlib              下载地址:http://linux.softpedia.com/get/Programming/Libraries/zlib-159.shtml

 

   然后把下载好的包上传到自己的Linux对应的目录下,并解压相关压缩包,解压命令:

tar  -zxf  文件名.tar.gz

   安装之前,检查是否已经安装 gcc环境,如果没有,先安装 gcc 环境。下面安装 包(步骤来自博客:https://www.cnblogs.com/code4app/p/7202039.html),如下:

1.安装apr
[root@localhost ~]$ cd apr-1.5.2  
[root@localhost apr-1.5.2]$ ./configure --prefix=/home/svn/apr-1.5.2  
[root@localhost apr-1.5.2]$ make  
[root@localhost apr-1.5.2]$ make test  
[root@localhost apr-1.5.2]$ make install  


2.安装apr-util:
[root@localhost ~]$ cd apr-util-1.5.4  
[root@localhost apr-util-1.5.4]$ ./configure --prefix=/home/svn/apr-util-1.5.4 --with-apr=/home/svn/apr-1.5.2  
[root@localhost apr-util-1.5.4]$ make  
[root@localhost apr-util-1.5.4]$ make test  
[root@localhost apr-util-1.5.4]$ make install  


3.安装依赖的sqlite:
  1.可以自行安装sqlite或者将sqlite解压到/home/svn/subversion-1.8.16/sqlite-amalgamation下

  2.这里采取将sqlite解压到/home/svn/download/subversion-1.8.18/sqlite-amalgamation下

  3.将文件夹名称改为要求的文件夹名称
    [root@localhost subversion-1.8.18]$ mv sqlite-autoconf-3190300 sqlite-amalgamation


4.安装zlib:
[root@localhost ~]$ cd zlib-1.2.11
[root@localhost zlib-1.2.11]$ ./configure --prefix=/home/svn/zlib-1.2.11  
[root@localhost zlib-1.2.11]$ make  
[root@localhost zlib-1.2.11]$ make install  


5.subversion的安装:
  1.[root@localhost ~]$ cd subversion-1.8.18

  2.[root@localhost subversion-1.8.18]$ ./configure --prefix=/home/svn/subversion-1.8.16 --with-apr=/home/svn/apr-1.5.2 --with-apr-util=/home/svn/apr-util-1.5.4 --with-zlib=/home/svn/zlib-1.2.11

  3.[root@localhost subversion-1.8.18]$ make

  4.[root@localhost subversion-1.8.18]$ make install


6.安装完成,添加环境变量path
[root@localhost subversion-1.8.18]$ cd  
[root@localhost ~]$ vi .bash_profile 
在文件里面添加以一行:PATH=/home/svn/subversion-1.8.18/bin:$PATH   并保持退出
[root@localhost ~]$ source .bash_profile

7.验证安装是否成功,输入:svnserve --version

 

1.2 Linux 在线安装svn服务

  使用命令: yum  install  subversion

   运行如下:

 

   上面显示说明svn服务安装完成。

  如果提示权限不足,就使用以下命令:su root

  再执行  yum install subversion

  安装成功后,查看svn版本, svnserve  --version

 

2,Linux下配置 svn 

2.1  创建仓库

  创建仓库:我们在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下面,创建成功后在svn下面多了几个文件夹。

  我们这里特别关注 conf 文件夹,这个是存放配置文件的:

   其中:

  • authz 是权限控制文件
  • passwd 是帐号密码文件
  • svnserve.conf 是SVN服务配置文件

   如果用户下是只读(即权限为 r),请使用 chmod  777 + 文件

  接下来我们依次修改这三个文件。

2.2  配置 passwd

  下面我们编辑passwd文档,然后创建两个用户,一个test1,一个 test2,如下:

   部分 passwd 文档内容如下:

 

2.3  配置 authz

   下面编辑 authz文档:

   上面配置的含义是,liuxianan/home/svn/下所有文件具有可读可写权限,test1, test2只有只读权限,除此之外,其它用户均无任何权限,最后一行*=很重要不能少。

 

  拓展:使用用户分组

  比如下面文件:

   上面配置创建了2个分组,分组1的用户可读可写(一般权限大的为 root账户),分组2的用户只能读。

  格式说明:

[/] #项目名字

@admin = rw (admin分组对整个testsvn版本库可读写)

test1 = rw (账号test1对整个testsvn版本库可读写)

[/test] #项目组

@test = rw (test分组对整个testsvn/test目录可读写)

 

 2.4  配置 svnserve.conf

  下面编辑 svnserve.conf文件:

   注意:打开注释千万不要留有空格,否则可能有问题。

   注意这里解开后,也可以这样写:

   注意最后一个  realm,都强调说设置为自己的仓库名称,我也试了一下,设置自己的仓库名称,也设了初始的  My First Repository,均没有出现问题。。。。。

2.5  启动与停止

  启动svn命令和杀死进程的命令如下:

   注意:上述启动命令中,-d表示守护进程 -r 表示在后台执行

  其实一个服务器只能启动一个 svn,停止还可以采用杀死进程的方式:

 

 2.6  svn从创建到启动的所有命令集合

  下面截图是所有的过程:

 

 3,客户端连接使用

  SVN 是一个跨平台的软件,支持大多数常见的操作系统,下面主要学习SVN服务器在Windows上的安装和配置过程。

  这里使用TortoiseSVN,输入地址svn://你的IP 即可,不出意外输入用户名和密码就能连接成功了。

3.1 tortoiseGit的下载及其安装

  首先,去tortoise的官网下载软件。下载地址:https://tortoisegit.org/download/

   下载好后,傻瓜式安装。当然你也可以下载语言补丁包(如果不习惯英文的话)。

  安装完毕后,鼠标右键就可以看到 SVNCheckout和TortoiseSVN。如下动图:

 

3.2  客户端连接svn

  首先在Linux下接通 svn服务,然后使用 ifconfig 查看ip地址

   鼠标右键,点击输入SVN Checkout,将刚刚获取的 ip 地址写入,并输入对应的项目名称:

   点击OK后,即正确输入之后,会出现下面界面,并提示输入用户名,密码:

  (不要介意,将就着看,这是网图,大概意思相近,只不过现在svn界面更新的更好了)

   要想删除之前保存的账号密码,我们要进入 tortoisesvn里面,点击settings:

   进去settings,然后去  Saved Data,如下,清除以前的cookie就可以。

 

4,Linux下SVN一个版本库多个目录权限设置

   一个版本库多个目录的权限设置需要注意的是其中目录在authz中的命名规范,否则你用户的权限再怎么设置都是不起作用的。

   如:你建了个版本库是/opt/svndata/test,然后用SVN客户端导入目录或者直接通过SVN客户端新建目录,最后通过设置版本库下conf中的authz,设置相关人的权限:
[test:/]
admin = rw
* = r

  admin用户版本库根目录有读写权限(通过SVN客户端的游览版本库可以测试),其他所有人只有只读权限。

[test:/one](这里的目录不能写错,写错后下面权限再怎么设置都会不起作用)
user01 = r
user01用户对版本库中的one目录有只读权限(通过SVN客户端的游览版本库可以测试)

  大家可以多建几个用户和目录来测试一下。我也是在设置多目录权限时碰到问题,最终总结出这个结果。

   不过在一个project下面创建多个项目,可以这样配置权限:

# 在总项目下的权限,除了admin,都是只读权限
[/]
admin = rw
user1 = r
user2 = r

# 在总项目下设置projet1的权限
[/project1]
admin = rw
user1 = rw
user2 = r

# 在总项目下设置projet1的下的 demo1的权限
[/project1/demo1]
admin = rw
user1 = rw
user11 = r
user2 = r

# 在总项目下设置projet2的权限
[/project2]
admin = rw
user1 = r
user2 = rw

 

 

参考文献:https://www.cnblogs.com/code4app/p/7202039.html

TortoiseSVN 使用教程:https://www.runoob.com/svn/tortoisesvn-intro.html

TotoiseSVN的基本使用方法:https://www.cnblogs.com/lsgxeva/p/9617795.html

http://blog.chinaunix.net/uid-7248244-id-2060481.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM