今天笔者为大家带来 SVN 的安装和使用,不知道 SVN 是什么? 就请让笔者为大家介绍一波吧~

SVN介绍

简介

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

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

主要作用

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

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

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

基本概念

  • Repository(源代码库):源代码统一存放的地方

  • Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份

  • Commit(提交):当你已经修改了代码,你就需要Commit到repository

  • Update (更新):当你已经Checkout了一份源代码, Update后就可以和Repository上的源代码同步

工作流程

  1. 从服务器下载项目组最新代码。(Checkout)

  2. 如果已经Checkout并且有人已Commit了代码,你可以更新以获得最新代码。(Update)

  3. 进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修 改了哪些代码,就需要这样做了)。(Commit)

  4. 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。 (Commit)

注意:如果两个程序员同时修改了同一个文件, SVN可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。 如果是同一行,SVN会提示文件Confict, 冲突,需要手动确认。

生命周期

创建版本库

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

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

检出

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

更新

顾名思义,update 操作是用来更新版本库的。这个操作将工作副本与版本库进行同步。由于版本库是由整个团队共用的,当其他人提交了他们的改动之后,你的工作副本就会过期。 让我们假设 Tom 和 Jerry 是一个项目的两个开发者。他们同时从版本库中检出了最新的版本并开始工作。此时,工作副本是与版本库完全同步的。然后,Jerry 很高效的完成了他的工作并提交了更改到版本库中。 此时 Tom 的工作副本就过期了。更新操作将会从版本库中拉取 Jerry 的最新改动并将 Tom 的工作副本进行更新。

执行变更

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

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

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

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

复查变化

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

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

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

修复错误

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

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

解决冲突

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

提交更改

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

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

安装配置

下载

位置:https://www.visualsvn.com/downloads/ (服务器)

位置:http://tortoisesvn.net/downloads.html (客户端)

最后下载完成的安装包

安装

安装 VisualSVN Server

双击安装程序 VisualSVN-Server-4.2.1-x64.msi

勾选复选框选择同意,然后选择 Next,选择 Upgrade

选择默认配置,选择 Next

设置服务器的安装路径、资源的存放目录及端口

使用默认配置,选择Next

如果出现这个弹窗,选择 Ignore 忽略即可

等待安装,安装完成后可勾选复选框,然后选择 Finish

出现如下窗口,则表示安装成功

安装 TortoiseSVN

选择 Next,然后勾选 command line client tools,选择 Next

设置TortoiseSVN的安装路径,勾选 command line client tools

进入到TortoiseSVN软件使用协议界面,直接选择 Install 进行安装

安装完成之后,直接选择 Finish 即可

在任意空白地方,右键,出现如下内容,则表示安装成功

配置

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

设置IP和端口

打开服务器,点击 VisualSVN Server,选择 Configure authentication options

设置Server name ,建议使用当前IP

Server name的值可以设置为:

  1. 127.0.0.1 (只能本地自己访问)
  2. 电脑用户名(只能本地自己访问)
  3. 当前IP(能够拼通IP的用户均可访问)

Server Port使用默认值即可

查看当前IP: 打开dos窗口(Windows+R键),输入ipconfig,按回车

新建账号密码

右键左侧菜单 User,选择 Create User

设置用户的账户和密码

新建分组

选择 Group 右键,选择 Create Group

设置分组名称,及为分组添加用户

SVN使用

新建版本库

选择 Repositories 右键,选择 Create New Repository

选择默认设置,选择下一步,设置仓库名称

设置仓库目录 (选择任意一个选项都可)

设置仓库的访问权限(这里设置所有 svn 用户都有读/写权限)

仓库创建完成

签入项目到SVN(import)

拷贝远程仓库的地址

选择任意项目,右键选择 TortoiseSVN,选择 import

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

选择永久接受

输入用户账号和密码

导入成功

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

检索项目(check out)

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

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

检索完成

提交代码(commit)

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

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

提交成功

更新代码(update)

如果当前资源不是最新版本,则可在项目中空白地方右键,选择 SVN Update

更新成功

版本冲突问题

版本冲突原因

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

版本冲突现象

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

假设文件名是kingtuns.txt

对应的文件名分别是:

kingtuns.txt.r101

kingtuns.txt.r102

kingtuns.txt.mine

kingtuns.txt

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

版本冲突解决

现在A、B两个用户都更新项目文件到本地。

用户A

用户B

项目中的 hello.txt 文件原始内容为:

A用户修改文件,添加内容 "A用户修改内容" ,完成后提交到服务器

B用户修改文件,添加内容 "B⽤户修改内容" ,完成后提交到服务器

B用户提交更新至服务器时提示如下

B用户将文件提交至服务器时,提示版本过期:首先应该从版本库更新版本,然后去解决冲突, 冲突解决后要执行svn resolved(解决),然后在签入到版本库。在冲突解决之后,需要使⽤svn resolved(解决)来告诉subversion冲突解决,这样才能提交更新。

解决冲突的三种选择

  1. 放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决)

  2. 放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。

  3. 手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。

解决冲突

在B用户当前目录下,右键选择"SVN Update",执行“update”(更新)操作

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

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

打开编辑冲突的窗口

Theirs窗口为服务器上当前最新版本

Mine窗口为本地修改后的版本

Merged窗口为合并后的文件内容显示

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

同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。

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

此时,当前冲突已解决,可再次选择 "SVN Commit"提交文件

注:也可先不标记为解决,直接保存文件后,在B用户的冲突目录下,选中文件—右键菜单— TortoiseSVN—Resolved(解决)。然后再提交文件。

如何降低冲突解决的复杂度

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

总结:这个SVN工具是团队共同制作项目时使用,可以非常方便的将大家的项目整合在一起!

一切成就都缘于一个梦想和毫无根据的自信。

SVN 安装与使用教程 2020年9月更新最新教程相关推荐

  1. R语言安装TSA包(windows) 2020年5月

    2020年9月更新 TSA包的1.3版本,在2020年9月13日发布了,因此无需再通过源码进行安装,只需要: install.packages("TSA") 即可进行安装(如果提示 ...

  2. 指定的文件夹没有包含设备的兼容软件驱动程序_Windows 10 2020年5月更新兼容性问题汇总...

    5月27日,微软开始向部分PC推出Windows 10 May 2020更新,而不是所有人.您可以在设备上强制升级或通过检查更新手动安装,虽然大多数用户都能成功应用更新,但一些人在重大升级后报告了一些 ...

  3. 11寸笔记本电脑推荐_3000-20000元高性价比笔记本电脑推荐 含CPU天梯图、显卡天梯图 2020年11月更新...

    11.11最后一天,红包加码: 2020手机选购攻略: 脑筋急转弯:手机选购攻略.手机配置参数的含义.2020最新5G手机排行榜(2020年10月更新)​zhuanlan.zhihu.com 2020 ...

  4. win10推送_升级!win10 2020年5月更新已正式发布,你还没有收到官方推送?

    来了来了!它终于来了! 没错,就是今天,微软终于是正式推送Windows 10 2020年5月更新(Windows 10版本2004)! 这是win10系统今年第一次重大更新,有许多的新功能,比如搜索 ...

  5. win10 linux下载官网,微软正式发布Win10 2020年5月更新,官网已可下载

    IT之家5月28日消息 微软今天宣布为Windows 10用户发布Windows 10 2020年5月更新(Windows 10版本2004).这是Windows 10的最新 "重大&quo ...

  6. 微软正式发布Windows 10 2020年10月更新

    让大家等待多时的Windows 10 2020年10月更新终于来了,这也是今年微软为Win10准备的最后一个重大更新. Windows 10 2020年10月更新就是之前多次说道的Windows 10 ...

  7. 计算机应用基础简化版,电大宝典1200《计算机应用基础》期末考试题库简化版2020年1月年最新(00808).pdf...

    电大宝典 1200 <计算机应用基础>期末考试题库简化 版 2020 年 1 月年最新( 00808) 整理时间: 2019.12.09 已考完,大部分能找到,已按字母排版,方便查找(按历 ...

  8. Java解析快手视频去水印教程--2020年10月最新有效代码

    实现代码 去水印视频,目前只能适用于2020年以前发的快手视频,大家可以评论研究新的办法 import cn.hutool.core.map.MapUtil; import cn.hutool.htt ...

  9. 10的预览模式_谷歌相机2020年3月更新汇总,适配米10等五摄手机,30s手动曝光

    大家好,三月份谷歌相机mod版更新了众多版本,本次更新我给大家带来了每位国外modder的最新版本,希望大家能找到适合自己的版本. 本次更新亮点如下: 1.增加对五摄手机的支持,如小米10和小米10P ...

  10. UML建模工具更新情况(2020年8月更新)

    UMLChina整理的UML建模工具列表请见http://www.umlchina.com/tools/search.aspx 最近一段时间更新: 工具最新版本:Software Ideas Mode ...

最新文章

  1. 【C语言刷题】交换两个变量(包含不创建临时变量)的解法
  2. 全新目标检测范式SparseR-CNN,超详细实战教学(附数据集)
  3. Control usage: (1) Windows Phone 7: Popup control
  4. 刚盈利的DeepMind收购MuJoCo:转手开源,所有人免费用
  5. 困难样本挖掘(Online Hard Sample Mining)
  6. html5大赛是什么,IE9开发大赛为HTML5打了一针兴奋剂
  7. leetcode1306. 跳跃游戏 III(bfs)
  8. RetinaNet+focal loss
  9. oracle查看数据库所有列,sql – 如何查看oracle数据库中表的列的所有元数据?
  10. python线程数组_Python多线程
  11. 8s pod 查看 的yaml_k8s之深入解剖Pod(二)
  12. android init重启service(进程)
  13. easyui酷黑风格主题模板组件html
  14. cdrx4自动排版步骤_coreldraw自动排版
  15. iOS16更新后打不开微信 解决办法来了
  16. [老码团队]Swift中的协议 - 用协议来实现委托模式
  17. 跨专业考计算机研究生有专业限制吗,跨专业考计算机研究生难不难
  18. cf1239C (接热水)
  19. 计算机网络技术日趋完善并走向,计算机应用基础 10
  20. 安卓 10 周岁了:这些消失的经典 APP 你还记得吗?

热门文章

  1. ISIS 7 Professional运行报错解决方案
  2. android系统 限制应用安装程序,安卓手机不能安装软件是什么原因 安卓手机不能安装软件解决方法...
  3. SQL server 2008 如何卸载干净
  4. 读完本文你就了解什么是文本分析
  5. 需要实战项目的看过来: 黑马最新java《十次方》社交项目 请仔细看!
  6. CSDN直播BlOB视频流下载,JAVA实现下载直播视频
  7. MATLAB机械动力分析,基于MATLAB的柔性机械臂动力学分析.pdf
  8. 学校后勤物资管理系统(数据库课程设计)
  9. 《Windows游戏编程大师技巧》一、学海无涯
  10. linux查询电信端口,linux下获取电信,网通,铁通IP地址