SVN是一种版本管理系统,前身是CVS,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会出现混乱的情况,版本管理系统就是为了解决这些问题。

SVN中的一些概念 : 
a. repository(源代码库) 
   源代码统一存放的地方。 
b. Checkout (提取) 
   当你手上没有源代码的时候,你需要从repository checkout一份。 
c. Commit (提交) 
   当你已经修改了代码,你就需要Commit到repository。 
d. Update (更新) 
    当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更。

Centos 搭建SVN服务,有效的管理代码,以下三步可以快速搞定。

1、安装  

[root@www ~]# yum install subversion 

[root@www ~]# svnserve --version   判断是否安装成功 
  svnserve, version 1.6.11 (r934486) 出现类型提示,说明安装成功。 

有了SVN软件后还需要建立SVN库。 
[root@www ~]# mkdir /opt/svn/repos 
[root@www ~]# svnadmin create /opt/svn/repos 
执行上面的命令后,自动在repos下建立多个文件, 分别是conf, db,format,hooks, locks, README.txt。 

2、配置

上面的操作很简单,几个命令就搞定, 下面的操作也不难。

进入上面生成的文件夹conf下,进行配置,   有以下几个文件authz, passwd, svnserve.conf

其中authz 是权限控制,可以设置哪些用户可以访问哪些目录,   passwd是设置用户和密码的,    svnserve是设置svn相关的操作。

 2 .1先设置passwd 
  [root@www ~]# vi passwd 
[users]
# harry = harryssecret
# sally = sallyssecret
hello=123
用户名=密码

这样我们就建立了hello用户, 123密码  

   2.2 再设置权限authz 
[root@www ~]# vi authz 

[/]
hello= rw

意思是hello用户对所有的目录有读写权限,当然也可以限定。
如果是自己用,就直接是读写吧。 

2.3最后设定snvserv.conf 
[root@www ~]# vi snsvserv.conf 

anon-access = none # 使非授权用户无法访问 
auth-access = write # 使授权用户有写权限 
password-db = password
#authz-db = authz   # 访问控制文件 
realm = /opt/svn/repos # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。
采用默认配置. 以上语句都必须顶格写, 左侧不能留空格, 否则会出错.

好了,通过以上配置,你的svn就可以了。

3、连接

[root@www ~]# svnserve -d -r /opt/svn/repos 启动svn:

如果已经有svn在运行,可以换一个端口运行 
[root@www ~]# svnserve -d -r /opt/svn/repos --listen-port 3391

这样同一台服务器可以运行多个svnserver

好了,启动成功后,就可以使用了。
建议采用TortoiseSVN, 连接地址为: svn://your server address (如果指定端口需要添加端口  :端口号)

连接后可以上传本地的文件,有效的管理你的代码。 

开放svn端口

修改
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
保存
/etc/rc.d/init.d/iptables save
重启
service iptables restart
查看
/etc/init.d/iptables status

svn 命令详解

1、将文件checkout到本地目录

svn checkout path(path是服务器上的目录)

例如:svn checkout svn://192.168.1.1/pro/domain

简写:svn co

2、往版本库中添加新的文件

svn add file

例如:svn add test.php(添加test.php)

svn add *.php(添加当前目录下所有的php文件)

3、将改动的文件提交到版本库

svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)

例如:svn commit -m “add test file for my test“ test.php

简写:svn ci

4、加锁/解锁

svn lock -m “LockMessage“ [--force] PATH

例如:svn lock -m “lock test file“ test.php

svn unlock PATH

5、更新到某个版本

svn update -r m path

例如:

svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。

svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)

svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)

简写:svn up

6、查看文件或者目录状态

1)svn status path(目录下的文件和子目录的状态,正常状态不显示)

【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】

2)svn status -v path(显示文件和子目录状态)

第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。

注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

简写:svn st

7、删除文件

svn delete path -m “delete test fle“

例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”

或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种

简写:svn (del, remove, rm)

8、查看日志

svn log path

例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

9、查看文件详细信息

svn info path

例如:svn info test.php

10、比较差异

svn diff path(将修改的文件与基础版本比较)

例如:svn diff test.php

svn diff -r m:n path(对版本m和版本n比较差异)

例如:svn diff -r 200:201 test.php

简写:svn di

11、将两个版本之间的差异合并到当前文件

svn merge -r m:n path

例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

12、SVN 帮助

svn help

svn help ci

13、版本库下的文件和目录列表

svn list path

显示path目录下的所有属于版本库的文件和目录

简写:svn ls

创建版本库:
终端输入:svnadmin create [路径]
该路径可以是相对路径,例如,当前在home/user/svn/目录下,输入svnadmin create myproject,则该版本库会被创建在home/user/svn/目录下,新建一个文件夹名为myproject,其中便是版本库的文件了。

将文件导入版本库:
终端输入:svn import [源路径] [目标版本库路径] -m [日志信息]
源路径可以是相对路径,导入时会递归导入源路径下的所有文件和文件夹,目标版本库路径需要绝对目录(反正我试验是这样的),例如版本库的目录是:home/user/svn/myproject/。则应该这样写:file:///home/user/svn/myproject/
例如将当前目录导入版本库myproject:
svn import . file:///home/user/svn/myproject -m "导入文件"

svn import /alidata/www/weijdan/ file:///alidata/server/svn/weiqiye/ -m 'create weiqiye'

从版本库导出:
导入后原文件并未被纳入版本管理,若想获得受版本控制的文件,就需要从版本库导出
终端输入:svn co [版本库路径] [导出目标路径]
例如将myproject库中的文件导出到当前目录:svn co file:///home/user/svn/myproject .

svn co file:///alidata/server/svn/weiqiye/ /alidata/www/weijdan

svn提交文件后自动同步更新到网站目录

#!/bin/bash
REPOS="$1"
REV="$2"

export LANG=zh_CN.UTF-8
svn update /alidata/www/weijdan_test
echo `date`,`whoami`,$REPOS,$REV >> /alidata/server/svn/weiqiye/svn.log

chmod +x /alidata/server/svn/weiqiye/hooks/post-commit

svn开机启动

1.创建执行脚本svn.sh(/root路径下),其内容很简单,如下:

#!/bin/bash 
svnserve -d -r /var/www/svn/test

2.添加可执行权限

命令行运行

#chmod ug+x /root/svn.sh

3.添加自动运行

打开(vi或gedit) /etc/rc.d/rc.local ,在最后添加一行内容如下:

/root/svn.sh

保存退出。

4.检查

重启服务器,使用 ps -ef 看看svn进程是否启动了。

linux svn使用的更多相关文章

  1. Linux SVN 搭建(YUM)安装

    安装说明 系统环境:CentOS安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 Linux svn服务端配置 检查已安装版本 #检查是否安装了低版 ...

  2. linux svn迁移备份的三种方法

    原文:http://www.iitshare.com/linux-svn-migration.html svn备份方式对比分析 一般采用三种方式: 1.svnadmin dump 2.svnadmin ...

  3. linux svn服务器搭建、客户端操作、备份与恢复

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

  4. linux svn用法

    创建一个版本库.项目目录. 创建一个版本库: svnadmin create ~/SVNTestRepo 创建一个项目目录: svn mkdir file:///home/lsf/SVNTestRep ...

  5. linux svn安装和配置

    linux svn安装和配置,不结合apache http://blog.51yip.com/server/901.html 张映 发表于 2010-07-07 分类目录: 服务器相关 今天有个同事在 ...

  6. Linux SvN操作

    Linux svn管理工具的12个命令实践 2010-08-25 10:50 佚名 icycling.cublog.cn 字号:T | T 目前,绝大多数开源软件都使用svn作为代码版本管理软件.本文 ...

  7. linux svn启动和关闭

    linux svn启动和关闭 博客分类: linux系统 svnlinux  1,启动SVN sudo svnserve -d -r /home/data/svn/ 其中 -d 表示守护进程, -r ...

  8. Linux svn仓库备份到Windows机器上

    Linux svn仓库备份到Windows机器上 1,需求说明,Linux作为主库(A),Windows作为本地备份库(B),要求每天将Linux库中的代码备份到本地 2,B机器上安装svn服务端 3 ...

  9. linux svn 客户端基本使用命令

    1.从svn获取项目 svn co URL --username XX --password XX; 2.添加code file svn add codeFile; svn ci -m "c ...

  10. Linux svn的搭建与使用

    Linunx svn的搭建与使........纯手打的.. 一.安装前的准备 1.1 配置yum 库 1)加载光盘 2)进入/etc/yum.repo.d目录 3)复制"rhel-debug ...

随机推荐

  1. null和""的区别

    从字面上看,null表示空(用str==null判定),""表示空字符串(用str.equals("")或者str.length()==0判定) 问题一: nu ...

  2. 函数os_file_pread

    /*******************************************************************//** Does a synchronous read ope ...

  3. 转载:Unobtrusive JavaScript in ASP.NET MVC 3 隐式的脚本在MVC3

    Unobtrusive JavaScript 是什么? <!--以下是常规Javascript下写出来的Ajax--> <div id="test"> &l ...

  4. None

    0 值的整型 / 浮点型.空字符串('').空列表([]). 空元组((,)).空字典({}).空集合(set())都等价于 False,但是不等于 None thing = None if thin ...

  5. js spin 加载动画(loading)

    js spin 加载动画 最近做页面ajax加载是又用到loading动画,还好有一个spin.js 具体的包大家可以去http://fgnass.github.com/spin.js/下载, 如果想 ...

  6. poj 3160 Father Christmas flymouse

    // 题目描述:从武汉大学ACM集训队退役后,flymouse 做起了志愿者,帮助集训队做一些琐碎的事情,比如打扫集训用的机房等等.当圣诞节来临时,flymouse打扮成圣诞老人给集训队员发放礼物.集 ...

  7. Android下二维码的扫描

    Android平台下 二维码的扫描一般采用: Zxing:参考地址 Zxing功能比较强大,支持条形码和二维码的扫描,用的人也比较多,但是Zxing太大,一般开发简单的app,用起来比较麻烦. 所以网 ...

  8. memcache的应用场景和实现原理

    面临的问题 对于高并发高访问的 Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序运行离崩溃的 ...

  9. 【转】TLB(Translation Lookaside Buffers,TLB)的作用

    原文网址:http://sdnydubing.blog.163.com/blog/static/137470570201122810503396/ 从虚拟地址到物理地址的转换过程可知:使用一级页表进行 ...

  10. MySQL基础之第8章 视图

    8.1.视图简介 视图由数据库中的一个表,视图或多个表,视图导出的虚拟表.其作用是方便用户对数据的操作. 8.2.创建视图必须要有CREATE VIEW 和 SELECT 权限SELECT selec ...