# :-: linux系统svn
* 适合centos linux使用,其他公司版本的linux未测试
* 源代码的管理,为了解决在软件开发过程中,由源代码引发的各种蛋疼、繁琐的问题
* svn 分两个版本:
* Subversion 服务端,安装在linux里,管理svn
* TortoiseSVN 客户端,安装在windows里
> 源代码会引发哪些问题?
* 无法后悔:做错了一个操作后,没有后悔药可以吃
* 版本备份:费空间、费时间
* 版本混乱:因版本备份过多造成混乱,难于找回正确的想要的版本
* 代码冲突:多人操作同一个文件(团队开发中的常见问题)
* 权限控制:无法对源代码进行精确的权限控制
* 追究责任:出现了严重的BUG,无法得知是谁干的,容易耍赖
---
### :-: 一、安装svn
#### 1、安装命令
* centos 自带yum方法,使用yum方法安装svn
> yum -y install subversion
### 2、指定svn版本库目录
* mkdir 新建目录
* svnserve 设置svn版本库
> mkdir /svndata
> svnserve -d -r /svndata
### 3、创建版本库
* name 是你的项目的目录名称
> svnadmin create /svndata/name
---
### :-: 二、配置svn
#### 1、配置`svnserve.conf`文件
* 进入项目里的conf目录
> cd /svndata/name/conf
* 打开svnserve.conf文件,vi命令是系统自带的
> vi svnserve.conf
* 以下配置放在svnserve.conf文件里的20行后面
```php
anon-access=none
auth-access=write
password-db=passwd
```
* 保存文件
#### 2、配置`passwd`文件
* 打开passwd文件,也在conf目录下
> vi passwd
* 在后面一行输入账号=密码
> ouyangke=123456
* 保存文件
#### 3、连接svn
* 完成以上配置,就可以用windows电脑连接svn
* windows电脑必须安装svn软件
* windows电脑-》右击svn检出-》输入svn://ip地址/name-》弹出账号密码输入框
---
### :-: 三、svn同步脚本
* 同步的目的是:更新代码后,服务器中的项目自动更新同步
#### 1、拷贝项目
* 拷贝要同步的项目,到网站目录文件中
> svn co svn://localhost/name /www/name
#### 2、建立同步脚本
* 先复制一份同步脚本
> cd /svndata/name/hooks/
> cp post-commit.tmpl post-commit
#### 3、编辑同步脚本
> vi post-commit
* BASEPATH是拷贝的项目目录
```php
REPOS="$1"
REV="$2"
BASEPATH=/www/name
WEBPATH="$BASEPATH/"
export LANG=zh_CN.UTF-8
svn update $WEBPATH --username ouyangke --password 123456 --no-auth-cache
```
#### 4、执行脚本
* 执行脚本
> chmod +x post-commit
* 关闭svn
> killall svnserve
* 开启svn
> svnserve -d -r /svndata
*****
### :-: 四、配置文件介绍
#### 1、`svnserve.conf`文件
* 该文件有5个配置项:
```php
anon-access:
控制非鉴权用户访问版本库的权限。
取值范围为"write"、"read"和"none"。
即"write"为可读可写,"read"为只读,"none"表示无访问权限。
缺省值(默认):read
```
```php
auth-access:
控制鉴权用户访问版本库的权限。
取值范围为"write"、"read"和"none"。
即"write"为可读可写,"read"为只读,"none"表示无访问权限。
缺省值(默认):write
```
```php
password-db:
指定账号密码的文件名。
除非指定绝对路径,否则文件位置为相对conf目录的相对路径。
缺省值(默认):passwd
```
```php
authz-db:
指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。
除非指定绝对路径,否则文件位置为相对conf目录的相对路径。
缺省值(默认):authz
```
```php
realm:
指定版本库的认证域,即在登录时提示的认证域名称。
若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。
缺省值(默认):一个UUID(Universal Unique IDentifier,全局唯一标示)。
```
```php
示例:
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /svndata/name/
```
#### 2、`passwd`文件
* 该文件设置用户的账号密码
* 密码为未经过任何处理的明文
```php
示例:
ouyangke=123456 // 欧阳克的账号:ouyangke 密码:123456
huangrong=123456 // 黄蓉的账号:huangrong 密码:123456
```
#### 3、`authz`文件
* 该文件设置组和用户的权限
* / 是svn根目录
* ouyangke 是账号
* r 只读
* rw 读写
* *= 其他用户无权限
```php
[/]
ouyangke=rw
*=
```
---
* 启动 svn
> svnserve -d -r /svndata/svn
* 关闭 svn
> killall svnserve
* 删除版本库
> 很多人不知道怎么删除其中一个svn版本库,直接删除库目录
* 卸载svn
> rpm -e subversion
*****
### :-: 五、linux系统编辑文件
* 有时候,我们放假,在外地玩,可能突然代码有问题,这个时候,找台电脑,需要安装很多软件,我们就需要在线编写代码。
* 很多平台都提供了 手机app连接 linux系统的功能。我们以此作为媒介。
* 如果你的代码没有svn,也可以使用 宝塔或wdcp面板,直接线上修改。
> 备:`linux`服务器安装了`Subversion`,都可以使用此方法
1、连接svn
```linux
svn checkout svn://127.0.0.1/svndata/name /www/name
```
2、更新文件
```linux
# 进入name目录下
svn update
```
3、新增文件
```linux
# 文件名也可以是一个目录+文件名
svn add 文件名
```
4、上传文件
```linux
svn commit -m `备注` 文件名
```
* 新文件,必须先新增文件
* 如果上传文件失败,执行linux命令,改变环境变量:
* export SVN_EDITOR=vim
- 序言
- PHP基础
- 认识PHP
- 环境安装
- PHP语法
- 流程控制
- PHP数组
- PHP函数
- PHP类与对象
- PHP命名空间
- PHP7新特性
- PHP方法库
- PHP交互
- 前后端交互
- 项目常规开发流程
- MySQL数据库
- 会话控制
- Ajax分页技术
- 细说函数
- 类与对象
- 对象进阶
- 类与对象进阶
- OOP面向对象
- 设计模式
- 路由与模板引擎
- 异常类
- PHP爬虫
- PHP抓取函数
- PHP匹配函数
- 正则表达式
- PHP字符串函数
- 抓取实战
- PHP接口
- 了解接口
- PHP插件
- PHPSpreadsheet
- ThinkPHP6
- 安装
- 架构
- 数据库
- 数据库操作
- 视图
- 模版
- 模型
- 杂项
- 命令行
- 交互
- 微信小程序
- 介绍
- 配置
- 组件
- 交互
- API
- 其他知识
- 百度小程序
- 介绍
- 配置
- 组件
- 交互
- API
- 其他知识
- Linux
- 服务器上线流程
- 安装svn
- MySQL
- 认识MySQL
- MySQL函数
- 杂项
- composer依赖管理工具