SVN版本控制学习笔记

GA666666 2021-06-09 AM 92℃ 1条

SVN

1.主要内容

2.SVN介绍

2.1 简介

​ SVN全称 Subversion,是一个开放源代码的版本控制系统, Subversion在2000年由 Collabnet Inc开发,
现在发展成为 Apache软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。

​ SVN是一个开放源代码的版本控制系统,管理着随时间改变的数据。这些数据放置在一个中央资料档案库
( repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案
恢复到日的版本,或是浏览文件的变动历史。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的
目的

2.2 主要作用

  1. 目录版本控制

    Subversion实现了一个"虚拟"的版本控管文件系统能够依时间跟踪整个目录的变动。目录和文件都能进行
    版本控制。

  2. 真实的版本历史

    Subversion中,可以增加(add)、删除( delete)、复制(copy)和重命名( rename),无论是文件还是
    目录。所有的新加的文件都从一个新的、干净的版本开始

  3. 自动提交

    一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员以逻辑区间建立并提交变动,
    以防止当部分提交成功时出现的问题

2.3 基本概念

  • Repository(源代码库):源代码统一存放的地方
  • Checkout(提取):当你手上没有源代码的时候,你需要从 repository checkout一份
  • Commit(提交):当你已经修改了代码,你就需要 Commit到 Repository
  • Update(更新):当你已经 Checkout了ー份源代码, Update后就可以和 Repository上的源代码同步

2.4 工作流程

开始新一天的工作

  1. 从服务器下载项目组最新代码。( Checkout)
  2. 如果已经 Checkout并且有人已 Commit了代码,你可以更新以获得最新代码。( Update)
  3. 进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有
    时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。( Commit)
  4. 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。( Commit
    注意。・如果两个程序员同修改了同ー个文件。SVN可以台并这西个程序反的改动实所上SWN理源代码是以行为单位的就是说两个程序员只要不是修改了同ー行程序SVN部会自动合并两种修改。如果是同一行,SWN会提示文 Confict,沖突,需要手动确认

2.5 生命周期

2.5.1.创建版本库

​ 版本库相当于一个集中的空间,用于存放开发者所有的工作成果。版本库不仅能存放文件,还包括了每次修
改的历史,即每个文件的变动历史。

​ Create操作是用来创建一个新的版本库。大多数情況下这个操作只会执行一次。当你创建一个新的版本库的
时候,你的版本控制系统会让你提供一些信息来标识版本库,例如如创建的位置和版本库的名字。

2.5.2.检出

​ Checkout操作是用来从版本库创建一个工作副本。工作副本是开发者私人的工作空间,可以进行内容的修
改,然后提交到版本库中。

2.5.3.更新

​ 顾名思义, update操作是用来更新版本库的。这个操作将工作副本与版本库进行同步。由于版本库是由整个
团队共用的,当其他人提交了他们的改动之后,你的工作副本就会过期。

​ 让我们假设Tom和Jery是一个项目的两个开发者。他们同时从版本库中检出了最新的版本并开始工作。此
时,工作副本是与版本库完全同步的。然后,Jery很高效的完成了他的工作并提交了更改到版本库中。

​ 此时Tom的工作副本就过期了。更新操作将会从版本库中拉取Jery的最新改动并将Tom的工作副本进行更
新。

2.5.4.执行变更

​ 当检出之后,你就可以做很多操作来执行变更。编辑是最常用的操作。你可以编辑已存在的文件来,例如进
行文件的添加/删除操作。

​ 你可以添加文件/目录。但是这些添加的文件目录不会立刻成为版本库的一部分,而是被添加进待变更列表
中,直到执行了 commit操作后オ会成为版本库的一部分。

​ 同样地你可以删除文件/目录。删除操作立刻将文件从工作副本中删除掉,但该文件的实际删除只是被添加到
了待变更列表中,直到执行了 commit操作后才会真正删除

​ Rename操作可以更改文件/目录的名字。“移动"操作用来将文件/目录从一处移动到版本库中的另一处

2.5.5.复查修改

​ 当你检出工作副本或者更新工作副本后,你的工作副本就跟版本库完全同步了。但是当你对工作副本进行
些修改之后,你的工作副本会比版本库要新。在 commit i操作之前复査下你的修改是一个很好的习惯。

​ Status操作列出了工作副本中所进行的变动。正如我们之前提到的,你对工作副本的任何改动都会成为待变
更列表的一部分。 Status操作就是用来查看这个待变更列表

​ Status操作只是提供了一个变动列表,但并不提供变动的详细信息。你可以用d操作来查看这些变动的详
细信息。

2.5.6.修复错误

​ 我们来假设你对工作副本做了许多修改,但是现在你不想要这些修改了,这时候 revert操作将会帮助你。

​ Revert操作重置了对工作副本的修改。它可以重置一个或多个文件/目录。当然它也可以重置整个工作副本。
在这种情况下, revert操作将会销毀待变更列表并将工作副本恢复到原始状态。

2.5.7.解决冲突

​ 合并的时候可能会发生冲突。 Merge操作会自动处理可以安全合并的东西。其它的会被当做冲突。例
如,"helo.c"文件在一个分支上被修改,在另一个分支上被删除了。这种情況就需要人为处理。 Resolve操作就是
用来帮助用户找出冲突并告诉版本库如何处理这些冲突。

2.5.8.提交更改

​ Commit操作是用来将更改从工作副本到版本库。这个操作会修改版本库的内容,其它开发者可以通过更新
他们的工作副本来查看这些修改。

​ 在提交之前,你必须将文件/目录添加到待变更列表中。列表中记录了将会被提交的改动。当提交的时候,我
们通常会提供一个注释来说明为什么会进行这些改动。这个注释也会成为版本库历史记录的一部分。 Commit是一
个原子操作,也就是说要么完全提交成功,要么失败回滚。用户不会看到成功提交ー半的情况。

3.SVN安装

3.1.下载

官网下载(服务端)倒数第二个

官网下载(客户端)

3.2.安装

服务端成功:

客户端:桌面鼠标右键 出现小乌龟两个选项

3.3.配置

3.3.1.设置IP和端口

2.设置server name,建议使用当前IP

server namel的值可以设置为
    1.127.0.0.1(只能本地自己访问)
    2.电期用户名(只本地自己访问)
    3.当前IP(能够拼通1P的用户均可访问)
server Port使用默认值即可
直看当前1P
开dos口( windows+R),输入 ipconfig,按回车

3.3.2.新建账号密码

或者在User上右键

3.3.3.新建分组

和新建user差不多

好了测试一下,右键Repositoris--->Browse---->浏览器输入创建的账号密码---->出现下面的界面

SUCCESS!

4.SVN的使用

4.1.创建仓库

  1. 选择 Repositories右键,选择 Create New Repository
  2. trunk:躯干

    tags:标签

    branches:分支

  1. 设置仓库访问权限

  2. 创建成功

4.2.导入项目到SVN(Import)

  1. 拷贝远程仓库地址

  2. 选择任意项目,右键选择 Tortoisesvn,选择 import

  3. 将上一步拷贝的仓库地址粘贴到地址栏

  4. 选择第一个永久允许或者第二个只允许这一次

  5. 输入账号密码

  6. 导入成功

  7. 仓库右键,选择刷新,在服务器中看到的效果

4.3.检出项目(check out)

  1. 复制要下载的项目的远程地址

  2. 在需要检素项目的目录中,右键选择 SVN Checkout

  3. 输入远程地址,设置项目的存放位置

  4. 检索完成

4.4.提交代码(Commit)

  1. 新建文件,右键选择 Tortoisesvn,选择Add,将文件添加到版本库列表

    注意这里的项目文件区别于刚开始import的项目,这个项目文件夹是刚才我们check 下来的

  2. 再次点击文件,右键。会出现 SVN Commit

4.5.更新代码(Updata)

  1. 右键 选择SVNupdata

4.6.版本冲突

4.6.1.版本冲突原因

​ 假设A、B两个用户都在版本号为100的时候,更新了 kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候 kingtuns.txt文件的版本号已经变成101了。同时B用户在版本号为100的 kingtuns.txt文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的101版本上作的修改,所以导致提交失败。此时用户B去更新文件,如果B用户和A用户修改了文件的同一行代码,就会出现沖突

4.6.2.版本冲突现象

​ 冲突发生时, subversion会在当前工作目录中保存所有的目标文件版本上次更新版本、当前获取的版本(即别人提交的版本)、自己更新的版本、目标文件]。假设文件名是 kingtuns.txt

对应的文件名分别是

kingtuns. txt

r101kingtuns. txt

r102kingtuns. txt

minekingtuns. txt

同时在目标文件中标记来自不同用户的更改。

4.6.3.版本冲突解决

4.6.3.1.场景
  1. 用户A在100版本情况下修改了Hello.txt的第二行文字,并进行了提交
  2. 用户B也是在100版本的情况下修改了Hello.txt的第二行文字,进行提交时会发生版本冲突,
  3. 因为A在提交后Hello.txt的版本升为101,B在更新的时候就会发生版本冲突
4.6.3.2.解决冲突的三种选择
  1. 放弃自己的更新,使用 svn revert(回滚),然后提交。在这种方式下不需要使用 svn resolved(解决
  2. 放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行 resolved filename并提交(选择文件一右键一解决)。
  3. 手动解決:沖突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行 resolved filename来解除冲突,最后提交。
4.6.3.3.解决冲突

在用户B当前目录下 右键选择 SVN Updata 执行更新操作

B用户中的 Hello.txt文件出现冲突

在冲突的文件上(选中文件右键菜单ー tortoisesvn- Edit conflicts(解决冲突))

打开编辑冲突窗口

Mine图口为本地修改后的版本
Merged口为合并后的文件内容显
Theirs口为服务器上当前最新版本

如果要使用服务器版本,在 Theirs口选中差异内容,右键,选择 Use this text block(使用这段文本块同理如果要使用本地版本,在协商后,在Mine窗口右键,选择 Use this text block(使用这段文本块)

修改完成后,选择" Mark as resolved"(标记为解決),然后选择"Save"(保存文件),关闭窗口即可

4.6.3.4.如何降低冲突解决的复杂度
  1. 当文档编完成后,尽快提交,频紧的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂
  2. 在提交时,写上明确的 message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘
  3. 养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版
    本。每天下班前必须将已经编辑过的文档都提交到版本库。

5.ldea集成使用SVN

5.1.配置SVN环境

  1. File-> Other Settings(全局配置; Settings是局部配置)-> Version Controlー> Subversion

  2.  找不到svn.exe文件, Tortoisesvn的bin目录下面没有sVn.exe
     之所以没有是因为安装 Torto sesvn的时候没有勾选指定安装项,添加 command line client tools
  3. 重启Idea

5.2.检出代码(check out)

  1. 一路next

5.3.提交代码(updata)

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~



唉呀 ~ 仅有一条评论


  1. 笔记 - GA666666 Blog ~ 个人博客
    笔记 - GA666666 Blog ~ 个人博客

    [...]Docker容器 -2021Dubbo框架 -2020Git版本控制-20180Golang语言入门-2021Java设计模式-2019JVM探究-2019Mybatis框架-2019MySQL数据库-2019Netty网络编程框架-2021Redis数据库-2020SMS框架整合-2019Spring框架-2018Springboot框架-2019Springmvc框架-2019SVN版本控制-[...]

    回复 2024-02-21 11:10