集中式版本控制工具 —— SVN

一、简介

1️⃣ SVN 是什么?

  • 代码版本管理工具
  • 他能记住每次的修改
  • 查看所有的修改记录
  • 恢复到任何历史版本
  • 恢复已经删除的文件

2️⃣ SVN 与 Git 相比有什么优势?

  • 使用简单、上手快
  • 目录级权限控制,企业安全必备
  • 子目录 Checkout,减少不必要的文件检出

3️⃣ 主要应用在哪些情况?

  • 开发人员用来做代码的版本管理
  • 用来存储一些重要的文件,比如合同
  • 公司内部文件共享,并能按目录划分权限

4️⃣ 工具推荐

  • SVN 仓库、客户端推荐svnbucket SVN桶
    • 去官网注册 SVN桶 账号
  • 下载 SVN 客户端,此处推荐 TortoiseSVN

二、基本操作

1️⃣ 检出 checkout

  • 在SVN桶官网创建一个项目
    集中式版本控制工具 —— SVN_第1张图片
  • 复制我们的项目地址,来到我们本地文件夹中,鼠标右键选择检出
    集中式版本控制工具 —— SVN_第2张图片
  • 输入我们 SVN桶 的账户用户名和密码,检出完成后会显示我们的仓库目录
    在这里插入图片描述

2️⃣ 新增 add

  • 在我们本地仓库里创建一个文件 a.txt
    集中式版本控制工具 —— SVN_第3张图片

3️⃣ 提交 commit

  • 在仓库中鼠标右键,SVN Commit 会弹出提交页面
    集中式版本控制工具 —— SVN_第4张图片
  • 此时在网站中已经可以看到我们提交的内容了
    在这里插入图片描述

4️⃣ 更新 update

  • 右键仓库空白区域,可以通过 SVN Update 更新我们本地仓库

  • 修改 a.txt 文件,加入一行内容,然后提交,再提交前我们可以查看提交前后的文件差异
    在这里插入图片描述

  • 然后确定提交

5️⃣ 查看历史记录

  • 右键空白区域, Tortoise -> Show log 可以查看日志
    集中式版本控制工具 —— SVN_第5张图片
  • 使用SVN在每次提交之前先更新一下,这是一个很好的习惯,可以减少冲突

三、撤销恢复

1️⃣ 撤销本地修改

  • 先修改我们的 a.txt
    集中式版本控制工具 —— SVN_第6张图片
  • 右键我们的文件 -> 点击 Tortoise -> Revert 【还原】
    集中式版本控制工具 —— SVN_第7张图片
    集中式版本控制工具 —— SVN_第8张图片

2️⃣ 撤销已经提交的内容

  • 编辑 a.txt 文件,然后提交
    在这里插入图片描述
  • 右键仓库空白区域 -> Tortoise -> Show log -> 点击我们错误提交的那条日志 -> revert change this version 【复原此版本做出的修改】
    集中式版本控制工具 —— SVN_第9张图片
  • 此时我们的 a.txt 文件从之前错误版本恢复到了正常版本,处于修改状态,需要我们提交一下
    在这里插入图片描述在这里插入图片描述

3️⃣ 恢复到指定的版本

  • 我们添加新内容、提交,多重复几次,然后恢复到添加新内容之前的版本
    集中式版本控制工具 —— SVN_第10张图片
  • 我们可以 右键空白区域 -> Tortoise -> Show log -> 选择我们要复原到的那个版本的记录 -> Revert to this version 【复原到此版本】
    集中式版本控制工具 —— SVN_第11张图片
  • 可以看到 a.txt 已经恢复到了我们指定版本的内容,接下来只需要我们提交一下就好了
    集中式版本控制工具 —— SVN_第12张图片

四、添加忽略

  • 当有些文件我们并不想提交到我们的仓库中,我们可以添加忽略

    • 创建一个文件b,然后提交到我们的仓库中
    • 忽略一个文件的步骤:
      集中式版本控制工具 —— SVN_第13张图片
  • 忽略后的文件上会有一个 x
    在这里插入图片描述

  • 我们提交一下就会删除我们仓库里已经保存的但我们设置为忽略的数据,完成操作后文件不再拥有SVN的状态
    集中式版本控制工具 —— SVN_第14张图片

  • 当我们想取消忽略,我们可以采用添加或从忽略列表删除来实现
    集中式版本控制工具 —— SVN_第15张图片

五、解决冲突

1️⃣ 什么情况下容易发生冲突?

  • 多个人修改了同个文件的同一行
    集中式版本控制工具 —— SVN_第16张图片

  • 无法进行合并的二进制文件 【以修改图片为例】
    集中式版本控制工具 —— SVN_第17张图片

2️⃣ 怎么避免冲突?

  • 经常 update 同步下他人的代码
  • 二进制文件不要多个人同时操作

3️⃣ 冲突了怎么办?

  • 右键选择冲突解决方式:
    • 使用自己的版本、使用对方的版本、手动编辑冲突文件
      集中式版本控制工具 —— SVN_第18张图片
    • 哪边正确就右键选择使用此文本块
      集中式版本控制工具 —— SVN_第19张图片
  • 对于二进制的冲突文件,我们需要手动进行选择
    集中式版本控制工具 —— SVN_第20张图片

六、分支

  • 什么时候需要分支?

    • 隔离线上版本和开发版本
    • 大功能开发,不想影响到其他人,自己独立开个分支去开发
  • SVN经典目录结构:

    • trunk: 主干 用于存放一些开发中的文件,开发完成后我们就可以生成一个版本,然后存储到 branches分支中去
    • branches:SVN的branches目录是用来保存分支的目录,分支是代码库中的一个独立副本,它可以与主开发线分离并独立发展
    • tags:SVN的tag目录是用来保存代码库的某个特定版本的快照副本的目录,通常用于标记代码库中的重要事件或里程碑

1️⃣ 在我们的仓库下创建三个目录 trunk、branches、tag,然后将当前的文件都存储到 trunk

集中式版本控制工具 —— SVN_第21张图片

2️⃣ 当我们完成了本地开发,想要发布一个线上版本,可以将trunk中的文件生成一个版本存储到 branches

集中式版本控制工具 —— SVN_第22张图片
输入我们的分支保存地址
集中式版本控制工具 —— SVN_第23张图片
我们可以看到 online1.0 已经保存到了我们的 branches
集中式版本控制工具 —— SVN_第24张图片

3️⃣ 但是随着分支的增加,以后可能要更新的内容也越来越多,所以我们可以把这个分支单独的 checkout(检出)出来

复制SVN的地址
集中式版本控制工具 —— SVN_第25张图片
修改文件名并检出到指定目录
集中式版本控制工具 —— SVN_第26张图片
检出后的目录结构
集中式版本控制工具 —— SVN_第27张图片

4️⃣ 同理我们也把 trunk 也 checkout 出来,然后把包含所有的那个删除,只保留我们线上版本和主线版本

  • 我们在主干和分支中修改代码等操作,相互是不影响的

  • 如果我们线上版本修改了,我们可以通过分支合并的方式,将线上版本合并到主干上,完成对主干的修改
    集中式版本控制工具 —— SVN_第28张图片
    合并完成之后,我们到主干目录 commit 一次就好了

5️⃣ 我们根据 trunk 分支再创建一个 online2.0 分支出来,我们无需再通过 checkout 获取文件,可以右键 online1.0 进行分支切换
集中式版本控制工具 —— SVN_第29张图片
点击 Switch 之后,选择我们想切换到的分支
集中式版本控制工具 —— SVN_第30张图片

七、代码暂存

  • 代码暂存有什么用?
    • 代码改了很多,突然需要修复一个紧急 bug,但是代码还没有写完,不能提交
    • 代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交

集中式版本控制工具 —— SVN_第31张图片


八、复杂代码合并

  • 一般什么情况下才算复杂代码?

    • 主干开发新功能,改了很多代码
    • 分支是线上版本,修复了很多 bug
    • 也就是说两个分支的代码时间久了差异很大,无法直接和并或者指定提交记录合并代码
  • 一般我们都会借助 BeyondCompare 工具来完成复杂代码合并工作
    集中式版本控制工具 —— SVN_第32张图片

  • 右键左右两个目录对比后,会将所有存在差异的文件列出来
    在这里插入图片描述
    集中式版本控制工具 —— SVN_第33张图片

你可能感兴趣的:(版本控制工具,svn,git,服务器,集中式版本控制,快速上手)