SVN
1.主要内容
2.SVN介绍
2.1 简介
SVN全称 Subversion,是一个开放源代码的版本控制系统, Subversion在2000年由 Collabnet Inc开发,
现在发展成为 Apache软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。
SVN是一个开放源代码的版本控制系统,管理着随时间改变的数据。这些数据放置在一个中央资料档案库
( repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案
恢复到日的版本,或是浏览文件的变动历史。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的
目的。
2.2 主要作用
目录版本控制
Subversion实现了一个"虚拟"的版本控管文件系统能够依时间跟踪整个目录的变动。目录和文件都能进行
版本控制。真实的版本历史
Subversion中,可以增加(add)、删除( delete)、复制(copy)和重命名( rename),无论是文件还是
目录。所有的新加的文件都从一个新的、干净的版本开始自动提交
一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员以逻辑区间建立并提交变动,
以防止当部分提交成功时出现的问题
2.3 基本概念
- Repository(源代码库):源代码统一存放的地方
- Checkout(提取):当你手上没有源代码的时候,你需要从 repository checkout一份
- Commit(提交):当你已经修改了代码,你就需要 Commit到 Repository
- Update(更新):当你已经 Checkout了ー份源代码, Update后就可以和 Repository上的源代码同步
2.4 工作流程
开始新一天的工作
- 从服务器下载项目组最新代码。( Checkout)
- 如果已经 Checkout并且有人已 Commit了代码,你可以更新以获得最新代码。( Update)
- 进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有
时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。( Commit) 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。( 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.创建仓库
- 选择 Repositories右键,选择 Create New Repository
trunk:躯干
tags:标签
branches:分支
设置仓库访问权限
创建成功
4.2.导入项目到SVN(Import)
拷贝远程仓库地址
选择任意项目,右键选择 Tortoisesvn,选择 import
将上一步拷贝的仓库地址粘贴到地址栏
选择第一个永久允许或者第二个只允许这一次
输入账号密码
导入成功
仓库右键,选择刷新,在服务器中看到的效果
4.3.检出项目(check out)
复制要下载的项目的远程地址
在需要检素项目的目录中,右键选择 SVN Checkout
输入远程地址,设置项目的存放位置
检索完成
4.4.提交代码(Commit)
新建文件,右键选择 Tortoisesvn,选择Add,将文件添加到版本库列表
注意这里的项目文件区别于刚开始import的项目,这个项目文件夹是刚才我们check 下来的
再次点击文件,右键。会出现 SVN Commit
4.5.更新代码(Updata)
- 右键 选择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.场景
- 用户A在100版本情况下修改了Hello.txt的第二行文字,并进行了提交
- 用户B也是在100版本的情况下修改了Hello.txt的第二行文字,进行提交时会发生版本冲突,
- 因为A在提交后Hello.txt的版本升为101,B在更新的时候就会发生版本冲突
4.6.3.2.解决冲突的三种选择
- 放弃自己的更新,使用 svn revert(回滚),然后提交。在这种方式下不需要使用 svn resolved(解决
- 放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行 resolved filename并提交(选择文件一右键一解决)。
- 手动解決:沖突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行 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.如何降低冲突解决的复杂度
- 当文档编完成后,尽快提交,频紧的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂
- 在提交时,写上明确的 message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘
- 养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版
本。每天下班前必须将已经编辑过的文档都提交到版本库。
5.ldea集成使用SVN
5.1.配置SVN环境
File-> Other Settings(全局配置; Settings是局部配置)-> Version Controlー> Subversion
找不到svn.exe文件, Tortoisesvn的bin目录下面没有sVn.exe 之所以没有是因为安装 Torto sesvn的时候没有勾选指定安装项,添加 command line client tools
- 重启Idea
5.2.检出代码(check out)
- 一路next
[...]Docker容器 -2021Dubbo框架 -2020Git版本控制-20180Golang语言入门-2021Java设计模式-2019JVM探究-2019Mybatis框架-2019MySQL数据库-2019Netty网络编程框架-2021Redis数据库-2020SMS框架整合-2019Spring框架-2018Springboot框架-2019Springmvc框架-2019SVN版本控制-[...]