1.SVN的配置和使用

 

1.SVN出现的背景

1.1为什么使用版本控制工具?

从个人开发到集体开发
ftp文件服务器,颗粒太大,最小单位是文件,后提交会覆盖前面提交的内容;
 svn 服务器,以行为单位
 ftp服务器以文件为单位

img

1.2版本控制工具的功能:

1.协同修改

多个人并行修改服务器端的同一个文件

2.数据备份

  如果本地文件丢失可以服务器端文件进行恢复

3.增量式的版本管理;

服务器端保存每一个版本信息时只保存有修改的局部内容,节省服务器端资源

4.权限控制

  对团队中,参与开发的人员进行权限控制

5.历史记录

 查看修改人,修改时间,修改内容,日志信息
 将本地文件回复到摸一个历史状态

2.概念区分

1.版本控制和版本控制工具:

版本控制:

 工程涉及领域中使用版本控制管理工程蓝图的设计过程(需要版本的迭代),在IT开发过程中也可以使用版本控制思想管理代码的版本迭代

版本控制工具:

思想:版本控制

实现:版本控制工具

版本控制工具的演变过程:CVS->SVN VSS -->Git
	VSS 不会出现版本冲突,对使用的文件,进行锁定,相应的我们要付出人力成本的代价

集中式版本控制工具:
	CVS-》SVN VSS

分布式控制工具:
	GIT

2.SVN的工作机制

版本库 集中配置管理,客户端需要svn 客户端

img

SVN常用命令介绍

基本操作:
 检出 checkout
   把服务器端版本内容完整下载到本地
   在整个开发过程中只做一次
 更新update
	把服务器端相对于本地的新的修改下载到本地
 提交: 把本地修改上传到服务器 

3.SVN 服务器安装

1.Docker 中搭建SVN服务器

1.安装Docker

2.下载SVN Server

docker search svn
docker pull garethflowers/svn-server
docker images

3.运行Docker

docker run -v /opt/data/svn/repo:/var/opt/svn --name svn-server -p 3690:3690 --privileged=true -e SVN_REPONAME=repository -d garethflowers/svn-server

参数解释:

 -name 重命名
 -e传递key-value形式的环境变量,这里指定仓库名为 repository
-v /opt/data/svn/repo:/var/opt/svn 将容器/var/opt/svn 目录下的内容,挂载到宿主机/opt/data/svn/repo 下,且删除容器不会删除宿主机内容
-d 后台运行,守护线程
--privileged=true 指定容器是否为特权容器,特权容器拥有所有的capabilities

4.查看是否运行成功

查看运行起来的容器
docker ps

image-20200827154233362

5.进入容器创建SVN服务器空间

##进入容器内部
docker exec -it svn-server /bin/sh  
## 创建仓库  创建了一个为repository 的仓库
svnadmin create /var/opt/svn/repository
##进入仓库配置文件路径
cd /var/opt/svn/repository/conf

6.编译配置

vi svnserve.conf 编辑资源库配置:主要指定用户名和密码读取那个文件|权限读取那个文件

image-20200827160142139

vim passwd

img

vim authz 1.编辑 authz 文件(注意:[/]也是必须的)

image-20200827160322445

 重启svn 客户端
docker restart svn-server

7.测试

svn://175.24.2.2:3690/repository

2.服务器通过tar包安装

系统环境:centos7.2

第一步:通过yum命令安装svnserve,命令如下:

yum -y install subversion

此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行

若需查看svn安装位置,可以用以下命令:

rpm -ql subversion

第二步:创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)

选择在var路径下创建版本库,当前处于根目录下,一次性创建如下:

mkdir /var/svnrepos

第三步:创建svn版本库

在第二步建立的路径基础上,创建版本库,命令如下:

svnadmin create /var/svnrepos/xxxx  

(xxxx为你预期的版本库名称,可自定义)

创建成功后,进入xxxx目录下

cd /var/svnrepos/xxxx

进入目录,可以看见如下文件信息:

total 24
drwxr-xr-x 2 root root 4096 May  2 13:48 conf
drwxr-sr-x 6 root root 4096 May  2 13:48 db
-r--r--r-- 1 root root    2 May  2 13:48 format
drwxr-xr-x 2 root root 4096 May  2 13:48 hooks
drwxr-xr-x 2 root root 4096 May  2 13:48 locks
-rw-r--r-- 1 root root  229 May  2 13:48 README.txt

下面是这些目录的详细讲解 img

第四步:配置修改

进入已经创建好的版本库目录下,也就是前文说创建的xxxx,进入conf

cd /var/svnrepos/xxxx/conf

conf目录下,一共存放三份重要的配置文件,如下:

total 12
-rw-r--r-- 1 root root 1080 May  2 13:48 authz
-rw-r--r-- 1 root root  309 May  2 13:48 passwd
-rw-r--r-- 1 root root 3090 May  2 13:48 svnserve.conf

authz:负责账号权限的管理,控制账号是否读写权限

passwd:负责账号和密码的用户名单管理

svnserve.conf:svn服务器配置文件

1.编辑 authz 文件(注意:[/]也是必须的)

img

[/] 表示根目录,即 /var/svnrepos

luo = rw 表示用户luo对根目录具有读写权限。

2.编辑 passwd 文件

img

如上所示,用户名为:luo,认证密码为:luo123456

3.编辑 svnserve.conf 文件(注意:配置的前面不能有空格,一定要顶格写)

img

anon-access = none:表示禁止匿名用户访问。

auth-access = write:表示授权用户拥有读写权限。

password-db = passswd:指定用户名口令文件,即 passwd 文件。

authz-db = authz:指定权限配置文件,即 authz 文件。

realm = /var/svnrepos:指定认证域,即 /var/svnrepos 目录。

第五步:防火墙开启(这里以iptable防火墻为例)

多数情况下服务器安装完成,配置完成后,无法连接svn服务器,均是防火墙问题*【注意:如果是阿里云,腾讯云的服务器,还需在安全组添加端口开启规则】***

vi /etc/sysconfig/iptables

添加配置信息

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT

保存退出

systemctl restart iptables.service #重启防火墙使配置生效

六:启动svn服务器

svnserve -d -r /var/svnrepos

启动成功后,可用ps -aux查看服务启动是否成功

ps -ef | grep 'svnserve'

img

七:客户端访问svn服务器

在windows客户端,输入地址:svn://ip地址:3690/xxxx (iP地址为你linux的ip,xxxx为前文创建的版本库名称,3690为svn默认端口)

弹出输入用户名和密码,输入即可访问

或者在linux服务器输入命令测试:

svn co svn://ip地址:3690/xxxx

4.配置过程中的其余配置

1.设置随机启动

1.查看服务状态

chkconfig |grep svn //看和svn相关的命令
svnserve  默认开机不启动
设置svnserve 服务 自动启动 开机
名称: svnserve

默认开机不启动

img

chkconfig 管理所有服务
service svnserve status 的状态
service svnserve start  启动状态
centos7:systemctl enable svnserve.service

修改服务参数

对应可执行脚本文件的路径
cd /etc/rc.d/init.d
备份svnserve 服务器,配置

img

启动svn 服务:
service svnserve start
service svnserve status

img

svn 服务器启动

service svnserve start

service svnserve status

img

使用默认端口号的配置方式:

img

5.通过命令行客户端操作SVN服务器

命令行客户端:

创建两个工作区目录模拟两个开发人员

img

1.检出命令:

   svn checkout svn://192.168.70.140/pro_oa ./(目的地)    完整下载版本库中的全部内容
ll 不能查看隐藏内容
ls  -lA  查看隐藏文件 包含.svn 目录

附加效果:

在指定目录下创建.svn目录

保存本地目录和文件状态信息,用来和svn服务器进行比较

工作副本:

.svn 所在的目录就是工作副本

版本控制的相关操作都需要在工作副本目录下执行,例如提交/更新等等 这样的操作

为了保证工作副本能够正常和svn 服务器,不要删除和修改

2.提交文件:

svn commit [文件]  --报尚未纳入版本控制体系中
svn add hello.txt  并且 需要提交修改日志

要求:1.附加日志信息

日志信息相当于写Java代码时的注释,用来标记本次操作所作的修改

svn commit -m "备注" hello.txt

要求2:必须具备相应的权限

​ 使用文本编辑器 打开版本库 根目录 /conf/svnserve.conf

img

上传成功:

img

3.查看上传文件:

版本库中是通过数据库db 进行管理,我们不能直接查看到上传文件的基本信息

类似于读取数据库中文件的操作:

svn list svn://192.168.201.1/pro_oa

img

4.更新操作:

 svn update [文件名称]

作用:把服务器端文件所产生的所有修改下载到本地

img

更新和检出的区别:

检出:全部下载,创建工作副本

更新:部分增量下载,更新修改的地方的工作副本

5.冲突文件的解决:

vss 工具 不会产生;

冲突:

有冲突发生,一定会出现过时文件

1.过时的文件:在一个相对服务器端版本来说时旧版本的基础上进行修改

img

要求:所有过时的文件都必须先执行更新操作,更新后在最新版本基础上修改的文件才允许提交

两个用户对同一个版本库的同一个文件的同一行进行不同的修改,且有一个先提交后,后一个提交(update 后),会出现冲突

img

冲突的产生:

条件1:本地当前编辑的文件已经过时

条件2:从服务器端更新下来的修改和本地的修改在同文件同位置 不一致

冲突的表现:

1.文件内

2.目录内

img

由于产生了冲突,目录中额外产生了3个文件,

用意:

hello.txt.mine 自己编写的文件(发生冲突时本地文件的内容)

hello.txt.r5 冲突版本前的文件(发生冲突前文件的内容)

hello.txt.r6 冲突版本后的第一个人提交的文件(发生冲突时服务器端的文件内容)

img

其中 r[小版本号]

r[大版本号]

img

形成对比的内容,根据文件提示,自己选择使用mine 和 r【大版本号】

img

冲突的解决:

1.手动的解决

第一步:删除冲突时发生的三个多余文件

第二部:删除冲突文件内多余的符号

第三步:把文件编辑到满意的状态

第四步:提交

2.冲突的半自动解决

根据svn 的推荐,选择编辑

img

选择e :svn将调用linux 的文本编辑器

需要知道文本编辑器的文件,需要我们指定SVN_EDITOR

img

/usr/bin/vim aaa 可以进入文本编辑器

which vim -->vim的位置 /usr/bin/vim

img

设置环境变量:

vim etc/profile

img

source /etc/profile

echo $SVN_EDITOR

svn info god.log 看本地文件的版本信息

svn info svn://ssl/rep_oa/god.log

查看版本库的的版本信息

解决的过程:

img

编辑文件内容:

img

编辑完成后,使用r,就会覆盖本地文件

3.如何尽量减少冲突的产生:

1.如何减少 过时文件:改文件之前先进行更新操作,尽量在最新版基础上修改文件内容

2.尽量减少多人修改同一个文件的可能性

3.加强团队成员之间的沟通。

6.Eclispe开发工具集成SVN工具

1.eclispe的svn插件的选择

1.subversive
 eclipse 团队开发的svn 插件
2.subclipse
 apache 的svn 团队开发的eclispe插件
subversive 用户体验和性能比较好

2.subversive的安装:

  1. 安装前的确认:workspace 的编码字符集 -》 utf-8

img

2.subversive+svnconnector

img

img

两种connector:
svn kit
svnHL:远程subversive改写,稳定性比较好

3.创建资源库位置:

目的:让本地的Eclipse SVN插件知道svn 服务器的位置:

img

img

img

4.上传工程的内容到svn:

1.哪些文件 上传 哪些文件不上传:

.setting
.project  
  文件不需要提交上去,eclispe 的特定文件,
eclipse 忽略文件:
   eclipse 特定文件
忽略特定文件的原因:
 在服务器山最终运行工程完全没有任何关系
开发团队中,并不是所有参与开发的     成员都是用相同的IDE,所以代码之外的IDE特定文件有可能有区别,如果这些文件也都上传到svn服务器,那么很可能产生冲突
上传是一个标准maven工程
不同IDE之间可以基于标准的maven工程进行开发

2.svn 忽略特定文件

img

img

配置全局范围,忽略文件的操作方式

配置文件位置

img

img

要修改的配置项:

去掉# 并且顶格写

3.subclipse的安装

如果装的subclipse,不会生成目录项,通常不建议使用

上传工程:在eclipse 中叫做分享工程

第一步:工程-》邮件-》team-》share project

第二部:

img

第三步:选择一个已经存在的版本库,或者新建一个版本库

可以直接点击finish ,工程在svn 服务器端的目录名和工程名一致,上传工程,

第四步:确认工程跟布鲁和子目录是否全部上传

img

分享工程后,会在原工程下添加工作副本文件 .svn

图标的意思:

img

检出工程:

在ecliscep 本地工作区中导入

project from svn

确认资源库位置

注意:在select resurouce 要精确定位到要下载 工程名

img

img

找到svn服务器端

img

img

选择检出方式:

转化工程类型:

configure->convert to maven project

img

最终的效果:整个检出 的操作

常规基本操作:

资源-》右键-》 team --》 add

资源-》右键-》 team --> commit

eclispe 中冲突解决:

手动解决:

半自动解决:

team -> edit conflict

第一步: 在冲突的文件上-》右键-》Edit conflict

img

img

保存 关闭即可

img

将自动删除 冲突后产生的文件

标记为已合并

冲突文件-》 右键-》team->mark as merged

7.客户化工具安装-小乌龟

1.tortoiseSVN:

安装后重新启动

设置setting:

img

img

-------------------------

分享工程

.svn 没有 这个文件,在新工程下

只有.svn 存在,才可以进行commit

问题:单独使用 tortoiseSVN将一个工程上传到svn 服务器中

思路:

人为的到svn 服务器上,创建一个目录(空目录)-》检出-》.svn 文件

-》mvn archetype:generate ->工程目录结构-》导入到eclispe中进行开发

img

骨架文件需要 archetype-catalog.xml 文件,

针对 archetype_catalog.xml文件的准备工作

作用:maven 生成工程目录过程中需要使用的配置文件

下载地址

img

放置的位置:

img

通过tortoise 创建目录和版本库

打开资源库浏览器

img

右击-》create folder

检出新建的目录

客户端 --》svn checkout

使用maven 命令 生车工股价:

mvn archetype:generate 命令参数含义

img

img

前提条件:空文件

找一个空文件夹创建后,复制到副本空间内

-------------------

导入maven 工程:

设置setting ,忽略掉 target

img

如果在eclispe插件操作,则并无此设置过程

最新版svn ,打开文件,就会自动更新

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值