svn安装使用subversion

linux

centos6版本;用7 版本的话命令不兼容; 

 

 

                                                  SVN 笔记

 

  1. 从个人开发到团队协作

 

 

版本控制工具的功能

 

    • 协同修改
      1. 多人并行不悖的修改服务器端的同一个文件。
    • 数据备份
      1. 如果本地文件发生丢失可以服务器端文件进行恢复。
    • 增量式的版本管理
      1. 服务器端保存每一个版本信息时只保存有修改的局部内容,节约服务器端资源。
    • 权限控制
      1. 对团队中参与开发的人员进行权限控制。
    • 历史记录
      1. 查看修改人、修改时间、修改内容、日志信息。
      2. 将本地文件恢复到某一个历史状态。

 

 

  1. 版本控制简介
    1. 版本控制

工程设计领域中使用版本控制管理工程蓝图的设计过程。在 IT 开发过程中也可以使用版本控制思想管理代码的版本迭代。

 

    1. 版本控制工具

思想:版本控制

实现:版本控制工具

 

集中式版本控制工具:

CVS、SVN、VSS…… 分布式版本控制工具:

Git

 

 

  1. SVN 的工作机制
    1.  

 

 

C/S 结构

 

    1. 基本操作
      • 检出(Checkout)
        1. 把服务器端版本库内容完整下载到本地。

 

 

        1. 在整个开发过程中只做一次。
      1. 更新(Update)
        1. 把服务器端相对于本地的新的修改下载到本地。
      2. 提交(Commit)
        1. 把本地修改上传到服务器。

 

  1. 服务器端环境搭建步骤
    1. 安装服务器端程序

yum install -y subversion

 

 

 

    1. 创建并配置版本库
      • 创建版本库目录

mkdir -p /var/svn/repository

cd /var/svn/repository/

      • 在版本库目录下创建具体项目目录

mkdir pro_oa

      • 创建 SVN 版本库

svnadmin create /var/svn/repository/pro_oa

      • 版本库内容

 

 

 

    1. 配置 SVN 对应的服务
      •  

思路

      • SVN 服务
        1. 名称:svnserve
        2. 默认情况下不是开机自动启动
        3. chkconfig|grep svn
[root@rich repository]# chkconfig|grep svn
svnserve	0:关闭	1:关闭	2:关闭	3:关闭	4:关闭	5:关闭	6:关闭                
[root@rich repository]# chkconfig svnserve on #开机自启动命令
[root@rich repository]# chkconfig|grep svn
svnserve	0:关闭	1:关闭	2:启用	3:启用	4:启用	5:启用	6:关闭

开机自启动:

    chkconfig svnserve on

     chkconfig|grep svn

        1. 对应可执行脚本文件路径

 

cd /etc/rc.d/init.d/

/etc/rc.d/init.d/svnserve

 

修改: svnserve

copy svnserve svnserve.b

注意备份!

      • SVN 服务具体配置

原版

args="--daemon --pid-file=${pidfile} $OPTIONS"

修改版

args="--daemon --root 版本库根目录 --listen-port 指定端口号 --pid-file=${pidfile} $OPTIONS"

args="--daemon --root /var/svn/repository --listen-port 2255 --pid-file=${pidfile} $OPTIONS"

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

注意:我用指定端口后无法访问服务器,svn拒绝;建议用默认端口;

3690端口

args="--daemon --root /var/svn/repository --pid-file=${pidfile} $OPTIONS"
    1. 启动 SVN 服务
[root@rich init.d]# service svnserve start
正在启动 svnserve:[确定]
[root@rich init.d]# service svnserve status svnserve (pid	3443) 正 在 运 行 ... [root@rich init.d]# netstat -anp|grep :2255
tcp	0	0 0.0.0.0:2255    0.0.0.0:*    LISTEN  3443/svnserve


[root@rich init.d]# ps -ef|grep svnserve|grep -v grep
root	3443	1	0 11:41 ?	00:00:00 /usr/bin/svnserve --daemon --root
/var/svn/repository --listen-port 2255 --pid-file=/var/run/svnserve.pid [root@rich init.d]# cat /var/run/svnserve.pid
3443

 

 

 

 

  1. 命令行客户端
    1. 创建两个工作区目录模拟两个开发人员

mkdir -p /root/workspace/harry mkdir -p /root/workspace/sally

 

    1. 检出
      • 作用:完整下载版本库中的全部内容。
      • 命令:
        1. svn checkout svn://192.168.70.140/pro_oa ./
      • 附加效果
        1. 在指定目录下创建.svn 目录
        2. 保存本地目录和文件状态信息,用来和 SVN 服务器进行交互
      • 工作副本
        1. .svn 所在的目录
        2. 版本控制相关操作都需要在工作副本目录下执行。例如:提交、更新等等  这样的操作。
        3. 为了保证工作副本能够正常和服务器进行交互,请不要删除或修改.svn 目录中的内容。

 

    1. 添加
      • SVN 要求提交一个新建的文件前先把这个文件添加到版本控制体系中。
      • svn add 文件名

 

 

    1. 提交
      • 要求 1:附加日志信息
        1. 日志信息相当于写 Java 代码时的注释,用来标记本次操作所做的修改。
        2. svn commit -m "xxx" [文件名]
      • 要求 2:必须具备相应的权限
        1. 使用文本编辑器打开版本库根目录/conf/svnserve.conf 文件

把匿名访问配置项的注释打开。注意:行的开头不能有空格

[root@rich harry]# svn commit hello.txt
svn: 提交失败(细节如下):
svn: “/root/workspace/harry/hello.txt” 尚未纳入版本控制
[root@rich harry]# svn add hello.txt A	hello.txt
[root@rich harry]# svn commit hello.txt
svn:                                                                                                      提 交 失 败 ( 细 节 如 下 ): svn: 无法使用外部编辑器获得日志信息;考虑设置环境变量 $SVN_EDITOR,或者使用
--message (-m) 或 --file (-F) 选项
svn: 没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境变量,运行时的配置参数中也没有“editor-cmd” 选项
[root@rich harry]# svn commit -m "My first commit" hello.txt
svn: 提交失败(细节如下):
svn: 认证失败
[root@rich harry]# svn commit -m "My first commit" hello.txt
增加           hello.txt
传输文件数据.
提交后的版本为 1。

 

    1. 查看服务器端文件内容

 

[root@rich harry]# svn list svn://192.168.70.140/pro_oa good.log
hello.txt

 

    1. 更新操作
      • 作用:把服务器端文件所产生的所有修改下载到本地
      • 命令:svn update [文件名]

 

 

  1. 冲突
    1. 过时的文件
      • 概念:在一个相对服务器端版本来说是旧版本的基础上进行了修改的文件。
      • 要求:所有过时的文件都必须先执行更新操作,更新后在最新版基础上修改的  文件才允许提交。

 

    1. 冲突的产生
      • 条件 1:本地当前编辑的文件已经过时。
      • 条件 2:从服务器端更新下来的修改和本地的修改在“同文件同位置”不一致。

 

    1. 冲突的表现
      •  

 

文件内

      • 目录内

 

 

xxx.mine 文件:发生冲突时本地文件内容

xxx.r[小版本号]文件:发生冲突前文件内容

 

 

xxx.r[大版本号]文件:发生冲突时服务器端文件内容

 

    1. 冲突的手动解决
      • 第一步:删除冲突发生时产生的三个多余文件
      • 第二步:删除冲突文件内多余的符号
      • 第三步:把文件编辑到满意的状态
      • 第四步:提交

 

    1. 冲突的半自动解决
      •  

设置 SVN_EDITOR 环境变量

vim /etc/profile
-------------------------------------------
SVN_EDITOR=/usr/bin/vim export SVN_EDITOR
-------------------------------------------
source /etc/profile echo $SVN_EDITOR

 

 

 

      • 解决的过程
        1.  

使用 e 选项进入文件内容编辑界面

        1. 进入 vim 编辑器编辑文件内容

 

        1. 编辑完成后使用 r 选项标记为已解决

 

 

    1. 减少冲突的发生
      • 尽可能在修改文件前先进行更新操作,尽量在最新版基础上修改文件内容。
      • 尽量减少多人修改同一个文件的可能性。
      • 加强团队成员之间的沟通。

 

  1. Eclipse SVN 插件
    1. 简介
      • Subversive

Eclipse 团队开发的 SVN 插件。

      • Subclipse

Apache 的 SVN 团队开发的 Eclipse 插件。

 

    1. Subversive 的安装
      • 安装前
        1.  

 

 

Eclipse→Window→Preferences→Team

        1. 用户家目录下没有 Subversion 目录
      1. 安装过程
        1. 打开 Eclipse 应用市场

 

 

        1.  

搜索 Subversive

        1. 确认安装项目

 

 

点 yes 即可

        1. 同意协议,点 Finish

 

 

        1.  

安装过程

        1. 确认重启

 

    1. SVN Connector 安装
      • Get Connectors

 

 

      • 选择要安装的 Connector

 

  
      • 下一步、下一步……
      •  

同意协议,Finish

      • 点击 Install anyway

 

 

      •  

确认重启

    1. 创建资源库位置
      • 目的:让本地 Eclipse SVN 插件知道 SVN 服务器的位置
      • 操作步骤
        1.  

第一步:切换透视图

        1. 第二步:创建资源库位置

 

 

 

        1.  

输入 SVN 服务器的 URL 地址

        1. 效果

 

 

 

    1. Eclipse 工程中忽略文件
      •  

 

Eclipse 特定文件

      • 忽略特定文件的原因
        1. 在服务器上最终运行工程完全没有关系
        2. 开发团队中,并不是所有参与开发的成员都使用相同的 IDE,所以代码文件之外的 IDE 特定文件有可能有区别。如果这些文件也都上传到 SVN 服务器,那么很可能产生冲突。不同 IDE 之间可以基于 Maven 的标准目录结构识别工程。
      • 配置全局范围忽略文件的操作方式
        1. 配置文件位置

 

~\AppData\Roaming\Subversion\config
例如:C:\Users\Lenovo\AppData\Roaming\Subversion\config

 

 

        1. 要修改的配置项

把 global-ignores 的注释打开

global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo pycache	*.rej *~
#*# .#* .*.swp .DS_Store .settings */.settings/* .classpath .project target */target/*

 

 

※如果在 Eclipse 中操作,target 目录会自动忽略;如果使用 TortoiseSVN 则需要追加 target 目录设置。

    1. 分享工程
      • 第一步:工程→右键→Team→Share Project...
      • 第二步:版本控制工具中选择 SVN
      • 第三步:选择一个已经存在的资源库位置或新建一个

可以直接点 Finish(工程在 SVN 服务器端的目录名和工程名一致;上传工程目录的日志使用默认值)

 

      • 第四步:确认工程根目录下子目录和文件是否全部上传

 

 

 

常见图标含义

 

    1. 检出操作
      •  

 

在 Eclipse 中执行 Import 操作

      • 确认资源库位置

 

      • 找到 SVN 服务器端工程对应的目录

 

 

      • 选择检出方式

 

 

      •  

Finish

      • 转换工程类型

 

 

      •  

最终效果

    1. 基本操作

资源→右键→Team→相关菜单项

 

    1. 解决冲突
      • 第一步

冲突文件→右键→Team→Edit Conflicts

      • 第二步

 

 

在这个界面中修改至满意,关闭界面。

      • 标记为“已合并”

冲突文件→右键→Team→Mark as merged

      • 提交

 

  1. 分支
    1. 概念

 

在版本控制过程中,使用多个分支同时推进多个不同功能开发。

不使用分支开发:人与人之间协作 使用分支开发:小组和小组之间协作

 

    1. 应用场景举例

蓝色皮肤界面功能:小组 1

用户账号管理功能:小组 2

支付功能:小组 3

……

 

    1. 作用
      • 多个功能开发齐头并进同时进行
      • 任何一个分支上功能开发失败,删除即可,不会对其他分支造成影响

 

 

    1. 相关目录
      • trunk

主干

      • branches

分支

      • tags

存放项目开发过程中各个里程碑式的代码

 

    1. 创建相关目录
      • trunk

主干

      • branches

分支

      • tags

存放项目开发过程中各个里程碑式的代码

 

 

资源库位置→右键→New...→Folder

 

    1.  

 

创建各个具体分支的目录

    1. 创建代码分支

项目→右键→Team→branch...

 

 

 

    1. 切换分支

项目→右键→Team→Swith...

 

 

 

效果:

 

 

 

    1. 合并分支

工程→右键→Team→Merge...

 

 

 

※说明:如果两个分支各自都有新内容,需要合并两次才能够让他们内容一致  分支 1:☆☆☆★★★

分支 2:☆☆☆○○○

 

分支 1→分支 2:

分支 1:☆☆☆★★★

分支 2:☆☆☆○○○★★★

 

分支 2→分支 1:

分支 1:☆☆☆★★★○○○ 分支 2:☆☆☆○○○★★★

 

  1. SVN 权限管理
    1. 版本库中三个对应的配置文件
      • 版本库配置文件目录

/var/svn/repository/pro_oa/conf

      • svnserve.conf 文件
  1. # anon-access = write
  2. auth-access = write

匿名访问

授权访问

 

 

20 password-db = passwd

指定设置用户名密码的配置文件

27 authz-db = authz

分配权限的配置文件

 

      • passwd 文件

[users]

 

# harry = harryssecret

例子

# sally = sallyssecret

 

tom = 123123

用户名 = 密码

jerry = 123123

 

kate = 123123

 

 

      • authz 文件
  1. [groups]
  2. # harry_and_sally = harry,sally
  3. # harry_sally_and_joe = harry,sally,&joe 24 kaifa = tom,jerry

 

例子

 

用户组 = 用户,用户

30 [/]

针对版本库根目录进行权限设置

31 @kaifa = rw

@组名 = 权限值

32 kate = r

用户名 = 权限值

33 * =

上面已经授权的用户以外其他用户没有任何

 

权限

 

 

    1. 客户端测试

※Eclipse 中删除曾经登录过的用户名密码的操作方式

 

 

 

 

  1. 查看历史记录
    1.  

条目不可读问题解决

到 svnserve.conf 文件中把 anon-access 注释打开设置为 none

 

8[general]
9### These options control access to the repository for unauthenticated 10 ### and authenticated users.	Valid values are "write", "read",
11 ### and "none".	The sample settings below are the defaults. 12 anon-access = none
13 auth-access = write

 

    1.  

让文件回到某一个历史状态

  1. TortoiseSVN

 

    1. 独立将工程上传到服务器的思路

 

 

    1. 针对 archetype-catalog.xml 文件的准备工作
      • 作用:Maven 生成工程目录结构过程中需要使用的配置文件
      • 下载地址

http://repo.maven.apache.org/maven2/archetype-catalog.xml

      • 复制到 Maven 的本地仓库

Maven 本地仓库根目录\org\apache\maven\archetype\archetype-catalog\[版本号目录]

 

    1. 操作步骤
      • 打开资源库浏览器

 

 

      • 在 SVN 服务器上创建目录

 

      •  

 

检出新建的目录

 

 

      • 执行 Maven 命令

mvn archetype:generate 命令参数含义

参数名

作用/可选值

-DgroupId

生成工程坐标的 groupId 部分

-DartifactId

生成工程坐标的 artifactId 部分

-DarchetypeArtifactId

maven-archetype-quickstart 对应 jar 包工程

maven-archetype-webapp 对应 war 包工程

-DinteractiveMode

设置为 false 关闭用户交互模式

-DarchetypeCatalog

设置为 local 表示使用本地 archetype-catalog.xml 文件

-X

使用 DEBUG 级别打印日志

 

      •  

导入 Eclipse 效果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值