svn多人编辑一个文档_乐字节2020最全SVN

本文详细介绍了SVN(Subversion)版本控制系统,包括其主要作用、基本概念、工作流程和生命周期。SVN用于多个人共同开发项目,实现目录版本控制,允许自动提交和合并冲突。文章还讲解了Repository、Checkout、Commit、Update等核心操作,并阐述了解决冲突的方法。此外,还介绍了如何安装配置VisualSVN Server和TortoiseSVN,以及在IntelliJ IDEA中集成使用SVN。
摘要由CSDN通过智能技术生成

SVN

主要内容

SVN介绍

简介

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

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

主要作用目录版本控制

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

真实的版本历史

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

自动提交

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

基本概念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, 冲突,需要手动确认。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmHmeZsx-1607568329589)(/svn_1.png)]

生命周期

创建版本库

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

​ 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 是一个原子操作,也就是说要么完全提交成功,要么失败回滚。用户不会看到成功提交一半的情况。

安装配置

下载

*最后下载完成的安装包

安装

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

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

选择默认配置,选择 Next

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

使用默认配置,选择Next

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

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

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

安装 TortoiseSVN双击安装程序 TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi

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

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

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

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

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

配置

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

设置IP和端口打开服务器,点击 VisualSVN Server,选择 Configure authentication options...

设置Server nameServer 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_31.png)]

仓库创建完成

签入项目到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冲突解决,这样才能提交更新。解决冲突的三种选择放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决)

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

手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行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(解决)。然后再提交文件。如何降低冲突解决的复杂度当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。

在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘

养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。

Idea集成使用SVN

配置SVN环境File —> Other Settings(全局配置;Settings是局部配置) —> Version Control —> Subversion

配置svn找不到svn.exe文件,TortoiseSVN的bin目录下面没有svn.exe

之所以没有是因为安装TortoiseSVN的时候没有勾选指定安装项,添加command line client tools重启Idea

检索项目选择 VCS —> Checkout from Version Control —> Subversion

添加远程仓库中项目的URL

点击添加的URL,选择 Checkout

选择检索的项目的存放位置

选择Destination,根据自己的偏好选择,其他配置默认,单击 OK

选择 1.8 Format,点击 OK

已经check out一个项目,是否要打开,选择 Yes

选择 Add [

此时,项目就可以与远程仓库关联

提交代码选择 VCS —> Commit...

选择需要提交的文件,填写提交信息,选择 Commit

提交成功后,会在Idea最下面显示提交状态

​ 注:项目提交前,最好先更新,然后再提交。

更新代码选择 VCS —> Update Project...

默认即可,直接选择 OK

更新成功的提示信息

导入项目选择 VCS —> Import into Version Control —> Import into Subversion

选择 "+" 添加项目导入的地址(可手动添加一个文件夹,项目中的文件会放置在该文件夹中,文件名自定义)[

选择要导入的路径,选择 Import

选择要导入的项目,点击 OK

检查导入的路径,填写导入信息,选择 OK

在远程仓库中检查是否导入成功即可。

版本冲突问题如果未更新,就提交资源(有其他用户也提交过资源),则提交失败此时,执行更新操作,将其他人提交过的资源更新到本地,会提示冲突

通常选择合并,再选择需要保留的代码,选择好之后选择 Apply

提示更新成功再次选择提交,成功解决冲突

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值