【原】svn从入门到放弃

发表于2017-08-28 16:13  |  次阅读  |  0条评论  |   作者:siru90

 
【svn安装】
Ubuntu
apt-get install subversion
 
CentOS
yum install subversion
 
subversion软件包包含服务端和客户端两个部分
 
 
【服务端命令与客户端命令】
服务端命令
svnserver -- 控制svn系统服务的启动等
svnadmin  -- 版本库的创建/导出/导入/删除等
svnlook -- 查看版本库的信息等
 
 
客户端命令
svn -- 版本库的检出/更新/提交/重定向等
 
 
【版本库的创建与删除】
创建版本库
svnadmin  create /path/repos
 
svnadmin
 
删除版本库
rm -rvf /path/repos
 
【版本库配置及权限分组】
配置文件位置:/path/repos/conf/
authz --- 配置用户组以及用户组权限
passwd -- 配置用户名和密码
svnserve.conf -- 配置默认权限、权限配置文件及密码配置文件
 
 
修改svnserve.conf文件
[general]
#默认值是没有验证的用户只能更新代码,通过验证的用户既可以更新代码和提交代码
#去掉下面两行前面的#号
anon-access = read
auth-access = write
 
#去掉下面两行前面的#号
#password-db,密码文件目录路径。 auth-db 权限文件路径
password-db = passwd
auth-db = authz
 
 
 
passwd文件-- 当前版本库的用户名,密码有哪些
[users]
#添加imooc 用户,密码为123456
imooc = 123456
imooc2 = 123456
imooc3 = 123456
imooc4 = 123456
 
 
authz配置文件
[groups]
#格式:组名 = 用户名列表。用户名用逗号隔开,每一行表示一个用户组
pm = imooc
dev = imooc2, imooc3
rookie = imooc4
 
 
[/] #表示版本库的根目录
@pm = rw
@dev = r
@rookie = r
 
[imooc:/] #针对某一个版本库的用户组权限
@pm = rw
imooc2 = rw
imooc3 = r
imooc4 =   #什么都没有,表示什么不能操作
 
 
[repos:/xxx]  #表示版本库repos下xxx目录,所有用户都只有更新权限
* = r
 
 
 
【svn版本库访问】
一个svn服务端,多个客户端。
 
#客户端访问svn服务步骤
svnserve -d -r /svnroot/imooc  #运行svn服务
 
如何访问svn服务
通过命令行访问,图形界面形式访问
 
 
#检出版本库
cd svntest
svn checkout svn://192.168.0.130 --username imooc --password xx #也可以不写用户名和密码,回车后会提示
 
 
【svn服务自启动】开机自动运行
系统启动级别rc0,rc1,rc2,rc3.....
 
/etc/rc.local #默认绑定了所有的启动级别
vi /etc/rc.local
#在exit 0之前添加
svnserve -d -r /svnroot/imooc #svnserve -d -r 版本库路径
 
 
【常见svn术语与文件状态】
常见术语
版本库、检出、工作副本、更新、提交、版本、版本号
文件状态
    无版本控制、增加、修改、常规、冲突、删除、锁定
 
 
 
【checkout与export的区别】
checout 检出的工作副本目录包含.svn文件夹
    版本控制中有一种文件状态:无版本控制
export  导出的项目文件没有.svn文件夹, 不在版本控制下
 
svn checkout -r 2 //检出版本2
svn export -r 3 //导出版本3
 
checkout =>.svn + 项目文件
export => 项目文件
 
.svn记录着工作副本最后一次更新后的文件状态
.svn标记工作副本的一切变化
 
 
 
【常见svn客户端命令】
svn add - 添加到版本控制
svn commit - 提交修改到服务端(创建一个新版本号)
svn update - 更新工作副本。 
svn update 特性:默认情况下,每个文件只会从服务端更新一次最新版本
svn delete - 从版本库中删除文件或目录
 
 
cd svn_1 #进入svn更目录
mkdir {css,js,img} #创建多个目录
touch index.html about.html content.html  #创建多个文件
 
svn add css #递归增加css文件及css文件夹下的文件
svn add js --non-recursive #只增加文件夹
svn add * #批量增加文件夹,(如果一个目录的本身已经在版本控制中,)
svn add * --force #强制执行,添加所有的文件
 
svn commit 等价于 svn ci
svn commit  -m "备注"  index.html #提交index.html文件,并增加备注说明
svn commit -m "备注"  * #提交所有文件
 
svn update 等价于 svn up
svn update #全目录更新到最新版本
svn up -r 1 index.html #更新index.html到版本1查看文件。 -r 版本号
svn up * #可以把多个历史版本的文件批量更新为最新版本,也可以把历史文件删除,再执行svn up
 
svn delete 等价于 svn remove 等价于 svn rm 等价于 svn del
svn rm contact.html -m "备注"  #删除contact.html
 
 
 
【常见svn客户端命令2】
svn diff - 版本差异比较
svn mkdir - 创建目录并增加到版本控制
svn cat - 不检出工作副本直接查看指定文件
 
 
svn diff 等价于 svn di
svn di index.html #比较本地工作副本和最后一次更新版本文件的差异
svn diff -r 2 index.html #比较副本和任意版本文件的差异
svn diff -r 1:3 index.html #比较版本1和版本3 index.html文件的差异
svn diff #比较当前目录下所有文件的差异
 
 
svn mkdir doc #创建doc文件夹,并加入版本库中
 
svn cat svn://192.168.0.130/index.html  # 查看svn指定文件
 
 
 
【工作副本还原revert】
svn revert [--recursive] [filename|*]
svn revert index.html #指定还原某个文件
svn revert * #批量恢复当前目录下文件。
svn revert -- recursive * #递归还原当前目录及子目录文件
 
 
【二进制冲突与树冲突】
http://www.imooc.com/video/15055
1、什么是冲突以及冲突的产生条件
2、如何尽可能的避免冲突
3、如何解决冲突
 
 
树冲突:发生树冲突的文件都不是二进制文本文件
树冲突无法精确到行并且处理树冲突必须处理整个文件
 
发现冲突推荐选择(p)推迟处理
(mc)使用自己版本
{tc}使用冲突版本
(df)显示冲突
(e)编辑文件, crtl+s 返回
svn resolve index.html  #采用命令处理冲突
svn resolved index.html #告诉服务端冲突已处理
svn ci -m "" index.html #提冲突文件
 
 
星期一到星期五,认真学习。有所得
每天学习半个小时,可以是9:00 -9:30  可以是1:00-2:00 可以是5:00 - 6:00
 
http://www.imooc.com/video/15055
 
 
 
【锁定与解锁】
svn lock - s锁定文件,防止其他成员对文件进行提交
svn unlock -解锁文件
svn lock index.html #锁定index.html文件的差异
svn unlock index.html #解锁
 
如果有提交操作,提交之后文件自动解锁
svn ci -m "" -- no-unlock index.html #提交时不自动解锁
 
 
------------------------------------
【svn进阶应用】
svn list - 列出当前目录下处于版本控制的所有文件
svn status - 列出工作副本中的文件(夹)的状态
svn log - 查看提交日志(来自svn ci的-m参数)
svn info - 工作副本及文件(夹)的详细信息
 
svn list 等价于svn ls
svn ls
svn ls --recursive #列出svn递归文件下的所有文件
svn ls -v # 详细了解每个文件的细节(版本,提交这,文件大小,)
svn ls -v --recursive
 
 
svn status 等价于 svn st
常见文件状态标记:
? - 无版本控制
D - 已被标记从版本库中删除
M - 已被编辑过
A - 已被标记增加到版本控制中
R - 文件被替换 (svn删除后新增了一个同名的文件,并增加到svn中)
C - 文件存在冲突
! - 文件缺失
 
 
svn log #查看svn提交日志
 
svn info # 查看版本库的详细信息。(版本库的路径、最高版本号,
svn info index.html #查看某个文件的
svn info --xml >> info.xml #使用xml形式查看版本信息,并使用管道保存到文件中
 
 
【多版本库解决方案】
----使用多个端口号实现多版本----
版本库可以创建在任意位置,但端口号容易混淆
 
TCP/IP 协议规定端口号范围为0-65535号
0-1023 号为公认端口
1024-49151 号为注册端口
49152-65535 号为私有端口
 
----使用多个端口号实现多版本----
cd /svnroot/
svnadmin create hello
svnadmin create world
svnadmin create imooc
 
 
修改配置
 
svnserve -d -r /svnroot/imooc (默认端口号3690)
svnserve -d -r /svnroot/hello #提示端口号已占用
svnserve -d -r /svnroot/hello -- listen-port 3691 #hello版本库绑定端口号3691
svnserve -d -r /svnroot/world -- listen-port 3692
 
 
重新修改配置,需先停止,修改配置后在重启
killall svnserve #停止所有版本库
 
--检出hello ,world版本库
svn co(checkout) svn://192.168.0.130:3691  hello3691(工作副本名称)
svn co(checkout) svn://192.168.0.130:3692  world3692
 
 
【多版本库解决方案B】
只使用一个端口号,运行多个版本库,版本库必须创建在同意目录下,无需分配端口号
cd /svnroot/
killall svnserve
 
svnserve -d -r /svnroot  #多个版本库必须都创建在svnroot目录下
svn so svn://192.168.0.130/imooc  #检出imooc版本库
 
 
【svn copy命令】
工作副本-工作副本的复制
cd /svnroot/imooc
 
svn copy 等价于 svn cp
svn copy(cp) index.html copy.html #复制imooc下的index.html为copy.html
svn cp -r 4 index.html copyV4.html #复制index.html版本4的文件到新文件中
 
 
svn mkdir temp #在当前目录下创建temp文件夹
svn cp index.html about.html ./temp  #复制index.html和about.html到当前目录下的temp文件夹中
 
工作副本-版本库的复制 (不可跨版本库)
svn cp index.html svn://192.168.0.130/imooc/target.html -m "提交备注" #
 
版本库-工作副本的复制 (可以跨版本库)
svn cp svn://192.168.0.130/imooc/index.html demo.html #
 
 
【主干版本与分支版本】
版本库-版本库的复制 (不可跨版本库复制)
cd /svnroot
svn cp svn://192.168.0.130/imooc/ svn://192.168.1.130/imooc/trunk  -m "" #创建主干版本
svn cp svn://192.168.1.130/imooc/trunk svn://192.168.1.130/imooc/branch -m "" #创建分支版本
cd ./imooc
svn up
 
 
【svn高级应用】
-HOOKS钩子应用
-版本库精简与丢弃
-版本库迁移与switch重定向
 
 
钩子:当执行某些特定操作时触发执行预先设定好的任务
cd /svnroot/imooc/hooks
 
这些是钩子模板文件
如果启用钩子,只需复制模板,去掉后缀.tmpl就可以启用
钩子文件其实就是一个shell脚本,执行对应的脚本
start-*** #指数据传输开始之前
pre-***  #pre开头的文件指数据传输之后,写入版本库之前这个时间点
post-*** 写入版本后才执行的钩子
文件名的后半部分对应的是操作
 
 
以post-commit.tmpl为列
hooks#  cp -a post-commit.tmpl post-commit
hooks#  ll
 
 
本站关键字:sunny90 web开发 数据库 移动开发 服务器 Nginx Mysql PHP
Copyright © sunny90版权所有 power by sunny90.com  
湘ICP备14012284号-1,粤公网安备 44030602000307号