SVN安装配置与详细介绍

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可以合并这两个程序员的改动,实际上SVN管理源代码是以⾏为单位的,就是说两个程序员只要不是修改了同⼀⾏程序,SVN都会⾃动合并两种修改。如果是同⼀⾏,SVN会提示⽂件Confict, 冲突,需要⼿动确认。
在这里插入图片描述

2.5. ⽣命周期

2.5.1. 创建版本库

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


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

2.5.2. 检出

Checkout 操作是⽤来从版本库创建⼀个⼯作副本。⼯作副本是开发者私⼈的⼯作空间,可以进⾏内容的修改,然后提交到版本库中。

2.5.3. 更新

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


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


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

2.5.4. 执⾏变更

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


你可以添加⽂件/⽬录。但是这些添加的⽂件⽬录不会⽴刻成为版本库的⼀部分,⽽是被添加进待变更列表中,直到执⾏了 commit 操作后才会成为版本库的⼀部分。


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


Rename 操作可以更改⽂件/⽬录的名字。"移动"操作⽤来将⽂件/⽬录从⼀处移动到版本库中的另⼀处。

2.5.5. 复查变化

当你检出⼯作副本或者更新⼯作副本后,你的⼯作副本就跟版本库完全同步了。但是当你对⼯作副本进⾏⼀些修改之后,你的⼯作副本会⽐版本库要新。在 commit 操作之前复查下你的修改是⼀个很好的习惯。


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


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

2.5.6. 修复错误

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


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

2.5.7. 解决冲突

合并的时候可能会发⽣冲突。Merge 操作会⾃动处理可以安全合并的东⻄。其它的会被当做冲突。例如,“hello.c” ⽂件在⼀个分⽀上被修改,在另⼀个分⽀上被删除了。这种情况就需要⼈为处理。Resolve 操作就是⽤来帮助⽤户找出冲突并告诉版本库如何处理这些冲突。

2.5.8. 提交更改

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


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

3. 安装配置

3.1. 下载

https://www.visualsvn.com/downloads/ (服务器)
在这里插入图片描述
http://tortoisesvn.net/downloads.html (客户端)
在这里插入图片描述
最后下载完成的安装包
在这里插入图片描述

3.2. 安装

3.2.1. 安装 VisualSVN Server
  1. 双击安装程序 VisualSVN-Server-4.2.1-x64.msi
    在这里插入图片描述
  2. 勾选复选框选择同意,然后选择 Next,选择 Upgrade
    在这里插入图片描述
  3. 选择默认配置,选择 Next
    在这里插入图片描述
  4. 设置服务器的安装路径、资源的存放⽬录及端⼝
    在这里插入图片描述
  5. 使⽤默认配置,选择Next
    在这里插入图片描述
    在这里插入图片描述
  6. 如果出现这个弹窗,选择 Ignore 忽略即可
    在这里插入图片描述
  7. 等待安装,安装完成后可勾选复选框,然后选择 Finish
    在这里插入图片描述
  8. 出现如下窗⼝,则表示安装成功
    在这里插入图片描述
3.2.2. 安装 TortoiseSVN
  1. 双击安装程序 TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi
    在这里插入图片描述
  2. 选择 Next,然后勾选 command line client tools,选择 Next
    在这里插入图片描述
  3. 设置TortoiseSVN的安装路径,勾选 command line client tools
    在这里插入图片描述
  4. 进⼊到TortoiseSVN软件使⽤协议界⾯,直接选择 Install 进⾏安装
    在这里插入图片描述
  5. 安装完成之后,直接选择 Finish 即可
    在这里插入图片描述
  6. 在任意空⽩地⽅,右键,出现如下内容,则表示安装成功
    在这里插入图片描述

3.3. 配置

说明:服务器端需要提供IP、端⼝、帐号、密码供客户端使⽤。即有如下配置

3.3.1. 设置IP和端⼝
  1. 打开服务器,点击 VisualSVN Server,选择 Configure authentication options…
    在这里插入图片描述
  2. 设置Server name ,建议使⽤当前IP
    在这里插入图片描述
Server name的值可以设置为:
 1.127.0.0.1 (只能本地⾃⼰访问)
 2.电脑⽤户名(只能本地⾃⼰访问)
 3.当前IP(能够拼通IP的⽤户均可访问)
Server Port使⽤默认值即可
查看当前IP:
 打开dos窗⼝(Windows+R键),输⼊ipconfig,按回⻋
3.3.2. 新建账号密码
  1. 右键左侧菜单 User,选择 Create User
    在这里插入图片描述
  2. 设置⽤户的账户和密码
    在这里插入图片描述
3.3.3. 新建分组
  1. 选择 Group 右键,选择 Create Group…
    在这里插入图片描述
  2. 设置分组名称,及为分组添加⽤户
    在这里插入图片描述

4. SVN使⽤

4.1. 新建版本库

  1. 选择 Repositories 右键,选择 Create New Repository…
    在这里插入图片描述
  2. 选择默认设置,选择下⼀步,设置仓库名称
    在这里插入图片描述
    在这里插入图片描述
  3. 设置仓库⽬录 (选择任意⼀个选项都可)
    在这里插入图片描述
  4. 设置仓库的访问权限(这⾥设置所有svn⽤户都有读/写权限)
    在这里插入图片描述
  5. 仓库创建完成
    在这里插入图片描述

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,将⽂件添加到版本库列表
    在这里插入图片描述
  2. 再次点击⽂件,右键,会出现 SVN Commit…
    在这里插入图片描述
  3. 提交成功
    在这里插入图片描述

4.5. 更新代码(update)

  1. 如果当前资源不是最新版本,则可在项⽬中空⽩地⽅右键,选择 SVN Update
    在这里插入图片描述
  2. 更新成功
    在这里插入图片描述

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.r101
kingtuns.txt.r102
kingtuns.txt.mine
kingtuns.txt
同时在⽬标⽂件中标记来⾃不同⽤户的更改。

4.6.3. 版本冲突解决
4.6.3.1. 场景
  1. 现在A、B两个⽤户都更新项⽬⽂件到本地。
    ⽤户A
    在这里插入图片描述

⽤户B
在这里插入图片描述

  1. 项⽬中的 hello.txt ⽂件原始内容为:
    在这里插入图片描述
  2. A⽤户修改⽂件,添加内容 “A⽤户修改内容” ,完成后提交到服务器
    在这里插入图片描述
  3. B⽤户修改⽂件,添加内容 “B⽤户修改内容” ,完成后提交到服务器
    在这里插入图片描述
  4. B⽤户提交更新⾄服务器时提示如下
    在这里插入图片描述
  5. B⽤户将⽂件提交⾄服务器时,提示版本过期:⾸先应该从版本库更新版本,然后去解决冲突,冲突解决后要执⾏svn resolved(解决),然后在签⼊到版本库。在冲突解决之后,需要使⽤svn resolved(解决)来告诉subversion冲突解决,这样才能提交更新。
4.6.3.2. 解决冲突的三种选择
  1. 放弃⾃⼰的更新,使⽤svn revert(回滚),然后提交。在这种⽅式下不需要使⽤svn
    resolved(解决)
  2. 放弃⾃⼰的更新,使⽤别⼈的更新。使⽤最新获取的版本覆盖⽬标⽂件,执⾏resolved filename并提交(选择⽂件—右键—解决)。
  3. ⼿动解决:冲突发⽣时,通过和其他⽤户沟通之后,⼿动更新⽬标⽂件。然后执⾏resolved
    filename来解除冲突,最后提交。
4.6.3.3. 解决冲突
  1. 在B⽤户当前⽬录下,右键选择"SVN Update",执⾏“update”(更新)操作
    在这里插入图片描述
  2. B⽤户中的 Hello.txt ⽂件出现冲突
    在这里插入图片描述
  3. 在冲突的⽂件上(选中⽂件–右键菜单—TortoiseSVN—Edit conflicts(解决冲突))
    在这里插入图片描述
  4. 打开编辑冲突的窗⼝
    在这里插入图片描述
Theirs窗⼝为服务器上当前最新版本
Mine窗⼝为本地修改后的版本
Merged窗⼝为合并后的⽂件内容显示
  1. 如果要使⽤服务器版本,在Theirs窗⼝选中差异内容,右键,选择Use this text block(使⽤这段⽂本块)。
    同理如果要使⽤本地版本,在协商后,在Mine窗⼝右键,选择Use this text block(使⽤这段⽂本
    块)。
    在这里插入图片描述
  2. 修改完成后,选择 “Mark as resolved”(标记为解决),然后选择"Save"(保存⽂件),关闭窗⼝即可
    在这里插入图片描述
  3. 此时,当前冲突已解决,可再次选择 "SVN Commit"提交⽂件
    在这里插入图片描述
    注:也可先不标记为解决,直接保存⽂件后,在B⽤户的冲突⽬录下,选中⽂件—右键菜单—
    TortoiseSVN—Resolved(解决)。然后再提交⽂件。
4.6.3.4. 如何降低冲突解决的复杂度
  1. 当⽂档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发⽣的概率,以及发⽣时解决冲突的复杂度。
  2. 在提交时,写上明确的message,⽅便以后查找⽤户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘
  3. 养成良好的使⽤习惯,使⽤SVN时每次都是先提交,后更新。每天早上打开后,⾸先要从版本库获取最新版本。每天下班前必须将已经编辑过的⽂档都提交到版本库。

5. Idea集成使⽤SVN

5.1. 配置SVN环境

  1. File —> Other Settings(全局配置;Settings是局部配置) —> Version Control —> Subversion
    在这里插入图片描述
  2. 配置svn
    在这里插入图片描述
    找不到svn.exe⽂件,TortoiseSVN的bin⽬录下⾯没有svn.exe
    之所以没有是因为安装TortoiseSVN的时候没有勾选指定安装项,添加command line client
    tools

5.2. 检索项⽬

  1. 选择 VCS —> Checkout from Version Control —> Subversion
    在这里插入图片描述
  2. 添加远程仓库中项⽬的URL
    在这里插入图片描述
  3. 点击添加的URL,选择 Checkout
    在这里插入图片描述
  4. 选择检索的项⽬的存放位置
    在这里插入图片描述
  5. 选择Destination,根据⾃⼰的偏好选择,其他配置默认,单击 OK
    在这里插入图片描述
  6. 选择 1.8 Format,点击 OK
    在这里插入图片描述
  7. 已经check out⼀个项⽬,是否要打开,选择 Yes
    在这里插入图片描述
  8. 选择 Add
    在这里插入图片描述
  9. 此时,项⽬就可以与远程仓库关联
    在这里插入图片描述

5.3. 提交代码

  1. 选择 VCS —> Commit…
    在这里插入图片描述
  2. 选择需要提交的⽂件,填写提交信息,选择 Commit
    在这里插入图片描述
  3. 提交成功后,会在Idea最下⾯显示提交状态
    在这里插入图片描述
    注:项⽬提交前,最好先更新,然后再提交。

5.4. 更新代码

  1. 选择 VCS —> Update Project…
    在这里插入图片描述
  2. 默认即可,直接选择 OK
    在这里插入图片描述
  3. 更新成功的提示信息
    在这里插入图片描述

5.5. 导⼊项⽬

  1. 选择 VCS —> Import into Version Control —> Import into Subversion
    在这里插入图片描述
  2. 选择 “+” 添加项⽬导⼊的地址(可⼿动添加⼀个⽂件夹,项⽬中的⽂件会放置在该⽂件夹中,⽂件名⾃定义)
    在这里插入图片描述
  3. 选择要导⼊的路径,选择 Import
    在这里插入图片描述
  4. 选择要导⼊的项⽬,点击 OK
    在这里插入图片描述
  5. 检查导⼊的路径,填写导⼊信息,选择 OK
    在这里插入图片描述

5.6. 版本冲突问题

  1. 如果未更新,就提交资源(有其他⽤户也提交过资源),则提交失败
    在这里插入图片描述
  2. 此时,执⾏更新操作,将其他⼈提交过的资源更新到本地,会提示冲突
    在这里插入图片描述
  3. 通常选择合并,再选择需要保留的代码,选择好之后选择 Apply
    在这里插入图片描述
  4. 提示更新成功
    在这里插入图片描述
  5. 再次选择提交,成功解决冲突
    在这里插入图片描述
  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值