`
zqjshiyingxiong
  • 浏览: 441447 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

linux 安装SVN

阅读更多

安装配置 svn server+apache



第一步,先检查是否安装了下面软件包

                #rpm -q subversion  httpd  mod_dav_svn
                如果没有请安装他们!


第二步,建立一个用户,用于管理SVN版本库
    useradd -m -s /bin/bash svn
第三步,创建版本库目录,并修改相应权限。
    mkdir /var/repos
    chown svn.svn /var/repos
第四步,创建项目仓库
su - svn
svnadmin create /var/repos/svn1
svnadmin create /var/repos/svn2
这是在svn1,svn2下面会参数一些文件,包括conf目录。


/var/repos/svn*为所创建的项目仓库的路径,理论上可以是任何目录,  但建议放在/home/svn下

 

第六步,修改配置文件/var/repos/svn1/conf/svnserve.conf

代码

#去掉#[general]前面的#号
[general]
#匿名访问的权限,可以是read,write,none,默认为read,如果你不愿意匿名共享请配置为none
anon-access = none
#认证用户的权限,可以是read,write,none,默认为write
auth-access = write
#密码数据库的路径,去掉前面的#, 默认使用的是同一目录下的passwd 文件作为用户认证方式
password-db = passwd


注意:所有的行都必须顶格,否则报错。
建议:为了防止不必要的错误,建议你直接用我上面的内容覆盖掉文件原来的内容



第五步,修改配置文件passwd。

代码
[users]
sxy = sxy    格式为:用户名=密码


注意
1. 一定要去掉[users]前面的#,否则svn只能以匿名用户登录,客户端不会出现登录窗口或密码提示,除非你的anon不为none,否则将返回一个错误。
2. 这里的密码都是没有加密的。

第六步,修改authz(可选)
  cd /var/repos/svn1/conf
 vi authz

  用户组格式:

[groups]

<用户组名> = <用户1>,<用户2>


  其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。用户必须要在passwd文件里能找到,它是给那个里面的user赋权限.

  版本库目录格式:

[/目录]

@<用户组名> = <权限>

<用户名> = <权限>


  示例:

  [groups]

  admin = tube

  [/]

  @admin = rw

  [/var/repos/svn1]

  user1 = rw(表示user1能够读写/var/repos/svn1目录下的所有信息)

  [svn2:/]

  user2=r(表示user2能够读svn2项目下的所有信息)


第七步,启动服务器

  使用用户svn来管理版本库目录/var/repos,则须转为svn用户,命令如下:

  su- svn

  然后启动svn服务

  svnserve -d -r /var/repos

  -d表示以daemon方式(后台运行)运行

  -r /var/repos指定根目录是/var/repos

  检查服务器是否启动正常:

  ps –ef|grep svnserve

这样访问服务器时就可以直接用svn://服务器ip来访问了。如果服务器有多ip的话可以使用--listen-host来指定监听的ip地址.

我们可以在svn客户端中通过svn://192.168.0.xx来访问svn服务器

对于多个代码仓库,我们在启动时也可以用-r选项来指定服务器根目录,但访问时需要写上每个仓库相对于svn根目录的相对路径.

比如,我们现在有两个代码仓库/var/repos/svn1 和/var/repos/svn2,我们用svnserve -d -r /var/repos  来启动,那么在客户端访问时可以用svn://192.168.0.xx/repo1和svn: //192.168.0.xx/repo2来分别访问两个项目



第八步 开放服务器端口

svn默认端口是3690,你需要在防火墙上开放这个端口。

     /sbin/iptables -A INPUT -i eth0 -p tcp --dport 3690 -j ACCEPT

     /sbin/service iptables save

你也可以通过svnserve的--listen-port选项来指定一个已经开放的其他端口,不过这样的话客户端使用也必须家上端口,如svn://192.168.0.xx:yyyy/.


第九步,使用svn客户端导入项目

    首先,切换至svn用户
    su – svn
    假设我们当前的项目源代码目录在/home/svn/work目录下。首先,创建这个目录:
    mkdir –pv /home/svn/work
    然后随便解压缩个源代码包或者自己手工建立一些文件,等等好作为导入项目的演示
    接下来,进入项目源代码目录
    cd /home/svn/work
    导入项目
    svn import svn://192.168.0.X/svn1 –m “test-svn1”
    接下来你应该可以看到上传得显示。


APACHE部分

第一步,查看subversion两个动态库有没有安装成功

     vi /opt/apache/conf/httpd.conf

    看到下面两个模块说明安装成功

     LoadModule dav_svn_module     modules/mod_dav_svn.so
     LoadModule authz_svn_module   modules/mod_authz_svn.so

第二步,配置SVN

  vi /opt/apache/conf/httpd.conf
  将apache使用的用户和组都改为svn
      User svn
  Group svn

    配置svn目录,以下是我的配置:

    <Location /svn>
       DAV svn
       SVNParentPath /var/repos
        AuthType Basic
        AuthName "Subversion repository"
        AuthUserFile /home/svn/passwd
        AuthzSVNAccessFile /home/svn/auth
        Require valid-user
  </Location>
  
  
第三步,建立本地访问控制文件

    htpasswd -c /home/svn/passwd tube

   会提示你输入密码,默认是MD5加密

第四步,建立本地项目控制文件

    touch /home/svn/auth

    我的文件内容为:
 
[/]
tube = rw
kevin = rw
shrek = rw

[svn1:/]
@group1 = rw
peter = rw

[svn2:/]
tube = rw
@group2 = rw
[groups]
group1 = testuser1,testuser2
group2 = testuser3,testuser4
以上文件书写格式的解释:
[svn1:/]               这表示,仓库svn1的根目录下的访问权限
user1 = rw             svn1仓库user1用户具有读和写权限
user2 = rw             svn1仓库user2用户具有读和写权限
user3 = r              svn1仓库user3用户具有读权限
[svn2:/]               svn2仓库根目录下的访问权限
user1 = r              user1用户在svn2仓库根目录下只有读权限
suser2 =               // user2用户在 svn2仓库根目录下无任何权限
#[/]               // 这个表示在所有仓库的根目录下
#* = r               // 这个表示对所有的用户都具有读权限
#[groups]               // 这个表示群组设置
#svn1-developers = harry, sally           // 这个表示某群组里的成员
#svn2-developers = sally
#[svn1:/]            
#@svn1-developers = rw       // 如果在前面加上@符号,则表示这是个群组权限设置

第五步,重启httpd服务,访问svn
    service httpd restart
    svn的访问地址是:http://192.168.0.X/svn/svn1
                      http://192.168.0.X/svn/svn2


附:SVN客户端使用说明


把本地项目testsvn整个目录里的内容往备份站点塞, 这是最初的结构, 建立最初的rev 0
以后checkout回来同样是按该路径,把目录下的(不包括最后的目录名)文件取回
svn import testsvn svn://path/to/repos -m "最后的这个注释不能少"

取回项目, 路径同上. 最后取出来的新目录名不给定就会用最后路径的最后一个目录名, 这里就是repos目录
svn checkout svn:///path/to/repos A_NewProjectName

更新本地项目. 千万记得,通过第一步import后的那个目录并没有默认建立svn与远程的关系,需要手动从服务器checkout回服务器的版本到本地, 才算正式建立与远程的关系(什么关系? 复杂关系!). checkout回来的项目就可以时不时地执行:
svn update

搅和取回来的项目一番后,察看动了什么(一下命令都要在项目目录下运行)
svn status

你对目录结构的修改或添加删除文件等类操作不能自动commit, 需要根据svn status显示的提示将文件/目录 明确 告诉svn是add, delete, copy 还是move
svn add new_dir
svn delete new_dir
svn status仅仅显示最根本的信息,更多的改动变化通过这个获得:
svn diff


查看项目当前状态。
svn status
查看你做的更改。
svn diff
svn commit      -m “message”       提交你的改变到版本库中,后面参数为此次发动的注释.

svn  list                   列出版本库中当前目录下的文件

svn delete file          在本地中删除file文件。svn commit 提交更新才会在版本库实际删除file文件。

svn  add      file        增加file文件。同样只有在svn commit 提交后才会在版本库中实际增加。


svn move file file2           将file文件更名为file2 
.
svn revert                      去除更改。后面可接操作过的文件。
svn log                                    svn 日志。

svn各种状态关键字意义:
L abc.c # svn已经在.svn目录锁定了abc.c
M bar.c # bar.c的内容已经在本地修改过了
M baz.c # baz.c属性有修改,但没有内容修改
X 3rd_party # 这个目录是外部定义的一部分
? foo.o # svn并没有管理foo.o
! some_dir # svn管理这个,但它可能丢失或者不完整
~ qux # 作为file/dir/link进行了版本控制,但类型已经改变
I .screenrc # svn不管理这个,配置确定要忽略它
A + moved_dir # 包含历史的添加,历史记录了它的来历
M + moved_dir/README # 包含历史的添加,并有了本地修改
D stuff/fish.c # 这个文件预定要删除
A stuff/loot/bloo.h # 这个文件预定要添加
C stuff/loot/lump.c # 这个文件在更新时发生冲突
R xyz.c # 这个文件预定要被替换
S stuff/squawk # 这个文件已经跳转到了分支

SVN恢复旧版本


svn没有恢复旧版本的直接功能,不过可以使用svn merge命令恢复。

比如说当前HEAD为14,而我要恢复成10版本,怎么做?用svn merge:
svn update
svn merge --revision 14:10 svn://192.168.0.X/svn1
svn commit -m "restore to revision 10"

可能会很奇怪,因为不理解为什么合并能恢复旧版本。
这里要理解一个关键点,就是svn merge的原理。merge是比较指定版本的差异,然后把这些差异应用到本地工作副本,而-r后的14:10,是指相对于版本14来说版本10的变化(注意,这个版本的次序很重要。),也就是相对版本14,我版本10添加了哪些文件或目录,以及哪些文件添加了哪些行删除了哪些行。又因为本地版本是最新的14,所以把这些差异应用到本地版本时就等于把14改变成10,其效果等于还原到版本10。然后提交,最后的版本号是15。
附:svnserve [选项]

有效选项:
 -d [--daemon]            : 后台模式
 --listen-port arg        : 监听端口(后台模式)
 --listen-host arg        : 监听主机名或IP地址(后台模式)
 --foreground             : 在前台运行(调试时有用)
 -h [--help]              : 显示这个帮助
 --version                : 显示版本信息
 -i [--inetd]             : inetd 模式
 -r [--root] arg          : 服务根目录
 -R [--read-only]         : 不赞成;使用档案库配置文件
 -t [--tunnel]            : 隧道模式
 --tunnel-user arg        : 隧道用户名(模式是当前用户UID的名字)
 -T [--threads]           : 使用线程代替进程
 -X [--listen-once]       : 监听一次(调试时有用)

软件包和模块说明
svn  :  Subversion 命令行客户端
svnlook : 检查版本库工具
svnadmin : 建立、调整和修补版本库的工具
Svndumpfilter  :  过滤 Subversion 版本库转存文件的工具
mod_dav_svn  : apache http 服务器的插件,可以让版本库在网络上可见。
svnserve :  单独运行的服务器,作为守护进程运行。



分享到:
评论

相关推荐

    linux安装svn文档

    linux安装svn文档,文档描述相关的linux安装svn的命令

    Linux离线安装svn.zip

    本文将详细讲解如何在没有网络连接的情况下,通过提供的“Linux离线安装svn.zip”压缩包来安装和配置svn。 首先,确保你的Linux系统已经安装了基本的开发工具,通常包括GCC编译器、make以及相关的库。这些工具可以...

    linux下安装SVN支持http

    linux下安装SVN支持http;linux下安装SVN支持http;linux下安装SVN支持http

    linux 安装svn并实现本地同步服务器

    Linux 安装 SVN 并实现本地同步服务器 本文将指导读者在 Linux 环境下安装 SVN(Subversion),并使用钩子脚本实现本地提交后自动同步代码文件到服务器的网站目录下。 安装 SVN 首先,使用 yum 命令安装 SVN: `...

    linux安装svn源码包以及安装步骤

    可以参考提供的`linux安装svn.txt`文件,里面可能包含了具体的配置示例。通常,这涉及到创建一个SVN仓库目录,设置权限,以及配置服务器的主配置文件`/etc/subversion/svnserve.conf`。例如: ``` sudo mkdir /var...

    Linux上安装svn简单步骤

    ### Linux上安装svn简单步骤 #### 一、简介 在Linux环境下安装Subversion(简称SVN)是一项常见的任务,尤其对于软件开发团队来说至关重要。SVN是一种广泛使用的版本控制系统,用于管理代码库的历史版本,方便团队...

    linuxsvn离线安装

    因此,我们需要使用RPM包来安装SVN。 3. **离线安装的前提**: 首先,你需要在有网络的环境中下载所有必需的RPM包。这些包通常包括`subversion`, `subversion-devel`, `apr`, `apr-util`, `neon`, `serf`, `db4`, `...

    linux安装svn1.8

    linux安装svn1.8详细步骤。修改添加删除用户名。svn的重启。

    Linux离线安装SVN所有依赖包,亲测可用

    Linux服务器离线安装SVN,所需要的依赖包,包括apr-1.7.0.tar.gz、apr-util-1.6.1.tar.gz、expat-2.0.1.tar.gz、sqlite-autoconf-.tar.gz、subversion-1.14.1.tar.gz、zlib-1.2.11.tar.xz,比从官网下载快N倍

    linux安装svn

    ### Linux 下安装 SVN 服务器及实现版本库同步到 Web 目录详解 #### 一、安装 Subversion (SVN) 在 Linux 系统中安装 SVN 服务器,首先需要确保系统中已经安装了必要的软件包。这里我们将使用 `yum` 包管理器来...

    Linux 安装SVN.doc

    Linux 安装SVN 详细步骤说明,包括下路径、配置、启动

    Linux(CentOS6.2)下安装SVN服务

    ### Linux (CentOS 6.2) 下安装SVN服务 #### 一、概述 本文将详细介绍如何在Linux(CentOS 6.2)环境下安装SVN服务。SVN(Subversion)是一种分布式版本控制系统,广泛应用于软件开发过程中对源代码进行版本控制。...

    linux下svn的安装

    在本文中,我们将详细介绍如何在Linux环境下安装SVN。安装过程分为几个步骤,涉及apr、apr-util和Apache HTTP Server的安装,以及最后的Subversion安装。 首先,我们需要准备必要的安装包。在本例中,我们下载了apr...

    linux离线安装SVN_1.8.17服务所需安装包

    本篇文章将详细讲解如何在Linux环境下离线安装SVN 1.8.17服务,并列出所需的安装包。 首先,你需要确保你的Linux系统已经安装了必要的基础工具,如`wget`(用于下载文件)和`tar`(用于解压压缩文件)。如果没有,...

    linux下安装svn命令行

    ### Linux下安装SVN命令行知识点详解 #### 一、安装Subversion服务器 在Linux环境中部署Subversion(SVN)服务器通常涉及几个关键步骤。首先,确保已经安装了必要的软件包。对于Debian及其衍生系统(如Ubuntu),...

    SVN(linux中安装配置SVN1.9.9所需的软件包).zip

    SVN(linux中安装配置SVN1.9.9所需的软件包)按照压缩包中的说明安装即可

Global site tag (gtag.js) - Google Analytics