linux

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

SVN 笔记

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

版本控制工具的功能

  • 协同修改

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

    1. 版本控制

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

  1. 版本控制工具

思想:版本控制

实现:版本控制工具

集中式版本控制工具:

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

Git

  1. SVN 的工作机制

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
  • 解决的过程

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

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

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

  1. 减少冲突的发生

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

    1. 简介

      • Subversive

Eclipse 团队开发的 SVN 插件。

  • Subclipse

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

  1. Subversive 的安装

    • 安装前

Eclipse→Window→Preferences→Team

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

搜索 Subversive

  1. 确认安装项目

点 yes 即可

  1. 同意协议,点 Finish

安装过程

  1. 确认重启

  1. SVN Connector 安装

    • Get Connectors

  • 选择要安装的 Connector
   
  • 下一步、下一步……

同意协议,Finish

  • 点击 Install anyway

确认重启

  1. 创建资源库位置

    • 目的:让本地 Eclipse SVN 插件知道 SVN 服务器的位置
    • 操作步骤

第一步:切换透视图

  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. 创建代码分支

项目→右键→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. 查看历史记录

条目不可读问题解决

到 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. 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 效果

svn安装使用subversion相关推荐

  1. linux安装svn服务器 cvs,Linux 环境安装配置Subversion

    序言: svn(subversion)是近年来崛起的版本管理工具,是cvs的接班人.目前,绝大多数开源软件都使用svn作为代码版本管理软件. 测试环境: CentOS 6.3 + subversion ...

  2. centos下安装apache + subversion(转)

    目录: 一.安装apr跟apr-util 二.安装apache服务器 三. 安装subversion 四. 配置subversion 五. 配置apache的httpd.conf 六. 验证安装 七. ...

  3. 【SVN】1. SVN 安装部署

    一. SVN概述 1. SVN 简介   Subversion 版本控制系统 简称 SVN.   SVN 是一个跨平台开放源代码的集中式版本控制系统,可以实现文件及目录的保存及版本回溯.   SVN ...

  4. Ubuntu SVN安装使用命令

    SVN 安装 apt-get install subversion checkout svn checkout svn://192.168.1.110/app 按提示输入相应的用户名和密码. 往版本库 ...

  5. linux svn安装和配置

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

  6. Fedora 12 安装配置subversion

    Fedora 12 安装配置subversion svn服务器有2种运行方式:独立服务器和借助apache.2种方式各有利弊. svn存储版本数据也有2种方式:BDB和FSFS.因为BDB方式在服务器 ...

  7. Linux搭建SVN(CollabNet Subversion)服务器 可视化界面

    为什么80%的码农都做不了架构师?>>>    最近一程序员友人给了我这样一个页面,顿时感觉SVN也可以这样管理的高大上,尽管svn已经不像当年如此风光,但是还有很多公司在使用它. ...

  8. Androidstudio SVN安装与使用

    原文地址:https://www.cnblogs.com/whycxb/p/9100725.html 概述 在AndroidStudio中开发版本控制,除了Git就是SVN,和Eclipse不同,An ...

  9. linux svn安装

    linux centos 5.4 x64 svn安装 #####################################################  #本文内容来自<老男孩linu ...

最新文章

  1. php 长连接心跳_支持gRPC长链接,深度解读Nacos2.0架构设计及新模型
  2. 使用 Docker 搭建 Laravel 本地环境
  3. Python实例浅谈之五Python守护进程和脚本单例运行
  4. linux重启was控制台报错,Linux非WAS部署,启动报错Cannot run program \lsb_release\
  5. 关于 iOS 10 中 ATS 的问题
  6. 互联网与CTI技术结合之商业应用
  7. Linux 用户空间和内核空间
  8. Visio图形自动编号
  9. 微信公众号通过链接实现关注(盗用广告主流量主)
  10. ajax(form)图片上传(spring)
  11. Windows phone 7
  12. 腾讯信鸽推送(一):服务端架构
  13. python tif转jpg_怎样把TIF转化为JPG图片格式
  14. ORB_SLAM3系统框图
  15. Flutter系列之设置Dialog的宽度
  16. 从小米人事变动谈引入人才与自主培养人才哪个更重要
  17. 看过一个报道湾湾川生态靠着自动售卖机就能很赚一笔
  18. Laravel+Vue前后端分离项目(四)邮箱验证与滑动验证
  19. 浅谈带宽,网速和流量之间的关系
  20. 【小经验】Windows 11 家庭中文版连接远程桌面,出现身份验证错误。要求的函数不受支持

热门文章

  1. 屏幕释放第八章 Libgdx输入处理(3)输入设备
  2. Process Explorer更新至v15.2
  3. Java Excel文件下载
  4. IDEA webapp文件夹没有蓝色小圆点的解决方案
  5. gitlab用户,组,项目权限管控
  6. 第十周Java学习总结
  7. 小程序:版本更新后获取用户信息变更
  8. 8 函数类型——《Swift3.0从入门到出家
  9. iOS in-app purchase详解
  10. KMP算法的C++实现