关于SVN使用的笔记小节

SVN简介

SVN 的全名称为Subversion。是一个开源的版本控制系统,用于多人开发同一个项目,共用一套资源。这个系统就是一个中央资源档案库(repository),类似于一个文件管理服务器,但是他可以记住这个档案库中每一次文件的变动。并且可以把存在其中的档案文件恢复到发生变动之前的旧版本。

主要功能简介:

1.实现虚拟的版本控制文件管理。能够按时间跟踪整个目录的变化情况。目录和文件都可以进行版本控制。

2.真实的版本历史:

只要对文件和目录做了改动,在系统中就会给我们新添加一个版本。

3.自动提交:

要么完全提交,要么完全不提交,例如改了10个文件,要不10个文件全都提交成功,要不10个文件全部提交不成功。没有中间值。

基本概念:

  • Repository:源代码统一存放的地方。
  • Checkout:提取,当本地没有该项目的时候,我们一般新建一个文件夹,然后在该文件夹中进行checkout的操作。
  • Commit:当我们把下载下来的代码进行了修改的时候,我们想把此代码供被人使用,则需要进行提交。
  • Update:别人提交了代码。我们就需要进行更新操作,将我们的代码和别人的同步。

工作流程:

  首先写项目的时候我们要先确定一下,我们的本地有没有这个项目,如果没有则需要Checkout一下。把项目下载到本地。如果有这个项目,可能其他人提交过代码,则我们需要把项目update一下,先把别人提交的代码更新到本地。这是后我们就可以写代码了。这时候如果我们发现写的代码有问题,则我们使用Revert还原操作。如果代码没有问题,则我们将代码提交上去。

冲突问题:如果2个coder同时去修改一个文件的同一行代码。就会发生冲突的情况。这时候提交,SVN 就会告知发生冲突,需要我们手动的去进行选择修改

生命周期:

  • 创建版本库:版本库是一个集中的空间,用于存放开发者的工作成果,Create操作,用来新创建一个版本库,大多数情况下这个操作只会执行一次。当刚创建新的版本库的时候,系统会提供一些信息标识版本库,例如创建的位置和名字等。
  • 检出:checkout命令是用来从版本库中复制一个工作副本。工作副本是coder的个人空间。coder可以对内容进行修改,然后提交到版本库中。
  • 更新:update操作是用来更新版本库的,这个操作将会使得coder个人的工作副本与版本库进行同步。当其他coder提交了他们的改动之后,则我本人的工作副本就会过期。例如。A和B为同一个项目的开发者,他们同时检出了最新版本的项目并进行开发工作,此时工作副本和版本库是完全一致的。之后,A先提交了他的工作到版本库中,此时B的工作副本就已经过期了。现在B进行更新操作,则会拉取A提交的工作内容,并将B的个人工作副本进行更新。
  • 执行变更:当我们Checkout检出了工作代码之后,我们可以在个人副本上对代码进行增删改查的操作,但是我们操作的这些文件不会立刻成为版本库的一部分,而是被添加到待变更列表中,直到我们执行了提交commit操作后,它才会变成版本库的一部分。
  • 复查变化:当我们Checkout了工作副本后,我们的工作副本和版本库是完全同步的。这是我们对个人工作副本进行修改,则我们个人的工作副本的版本就要比版本库的版本新。我们可以在commit提交代码前复查自己的修改内容。使用Status操作,可以列出个人工作副本中当前所有的变动,正如之前所说的,对个人工作副本的任何改动在commit之前,都会变成待更新列表的一部分,Status操作就是可以去查看这个待变更列表。但是Status操作只能提供一个变更的列表,但是不能查看详细的变更内容,可以使用diff操作来查看变动的详细信息。
  • 修复错误:假设目前我们已经对个人的工作副本进行了许多的修改,但是可能发现写的代码有问题,我不想使用这些修改了。这时就可以使用revert操作。该操作可以重置对于工作副本的修改。可以重置一个或者多个文件。当然也可以重置所有的工作副本。此时,revert操作会销毁待变更列表并将个人的工作副本恢复到原始状态。
  • 解决冲突:提交和合并可能会发生冲突Resolve操作就是帮助用户找出冲突,然后告诉版本库要如何处理这些冲突。
  • 提交更改:Commit操作,是用来将个人修改的工作副本提交到版本库的,这个操作会修改版本库的内容,其他的开发者可以update他们的工作副本获得这些修改内容。在提交之前,必须将文件添加到待变更列表中,当提交的时候我们需要提供一个注释,告知其他的coder我们为什么会进行这些修改。这个注释会成为版本库历史的一部分,Commit是一个原子操作,要么失败,要么成功。

SVN的安装

下载地址:https://tortoisesvn.net/downloads.zh.html

SVN有一个服务端客户端(小乌龟),服务端是用来储存我们的仓库的。 客户端就是用来做更新,提交操作的。

服务器端(略)(一般来说一个团队装一个就可以了。主要看小乌龟)

安装步骤,直接下一步就可以。

在CustomSetup这一步,也就是安装路径选择的时候,command line client tools这个选项需要我们勾选,选择Entire feature will be installed on local hard drive,不然后续无法在idea中进行集成。

 

 

 后面,直接下一步,按提示就可以完成了。当点击完Finish之后,在空白处,右键,出现如下内容,则表示安装成功。

 

 

使用SVN客户端检出项目

首先,需要拉哪个项目就新建一个文件夹,比如我要拉一个CRM管理系统的项目,那我新建一个CRM管理系统文件夹,然后双击进入。在文件夹中,右键,选择SVNCheckout,得到如下界面。

注意:这里一定要新建一个文件夹,不然从远程仓库拉下来的代码是没有根目录的。直接就是代码。所以一定要新建对应项目的文件夹。

 

上述图片中远程仓库url:就是你项目在SVN版本库的地址是多少。后面的三个省略号也可以点开进入之后可以找到在远程仓库上的文件,然后进行选择。

检索出项目的存放位置:就是检索出来之后的文件放在哪里。

最后点击check out.则代码会被拉倒本地的刚刚新建的文件夹中。

使用SVN客户端提交项目

首先,我们在个人的工作副本(也就是拉下来代码文件夹,此时文件夹的内容和版本库中的是一致的),新建一个文本内容 Hello.txt。此时个人工作副本中的内容已经和版本库中不相同了。

选中该文件,右键菜单——选择TortoiseSVN——选择Add.

然后,再选择该文件,右键菜单(这时出现了SVN Commit)——选择SVN Commit。出现如下图框。

 

 

 在Recentmessage中,写入注释,表示这次 变动的内容是什么样的。点击OK。

 

此时代码已经上传提交,At revision版本号变成了3。

使用SVN客户端拉(更新)项目

此时,我们模拟其他coder修改了Hello.txt文件,并提交了代码。现在版本库中该项目的版本号已经由3变成了4。

可是在我们自己的个人工作副本中,还是原先的3版本。所以此时我们需要从版本库中更新我们的项目。

此时我们在个人工作副本中,空白处,右键选择 SVN-update。然后更新项目。

 

此时,在版本库中的其他coder修改的Hello.txt的内容就被同步过来了。

版本冲突问题

首先,版本冲突的原因:

假设有A和B俩个用户,都在版本号为10的时候去修改了hello.txt这个文件。A在修改完成后,提交了代码到版本库中。这时候再版本库中,该文件的版本号已经变成了11。于此同时,B用户在自己的个人工作副本中修改版本号为10的文件修改完成后提交到版本库中,由于版本库中的hello.txt的代码现在是11版本。所以B肯定会提交失败。此时,B要先去更新hello.txt文件,如果此时B和A修改的是同一个文件的同一行代码。则必然会发生冲突的现象。

版本冲突的现象。

在发生版本冲突的时候,SVN会在当前的工作目录中保存所有的目标文件的版本。例如,上次更新的版本,自己更新的版本,别人更新的版本。

如何解决版本冲突的问题?

首选,我们需要模拟一个冲突发生的情况。

假设有A和B俩个用户,目前他们的代码都是从版本库总更新下来的最新版本V4.

 

此时A修改了该项目中Hello.txt的文件内容

修改文件第三行。

 

此时B也修改了项目中Hello.txt的文件内容

修改文件第三行。

 

此时,A用户提交了自己的代码到版本库中。

 

 提交后,我们发现,版本库中的文件版本变成了V5。

此时,B也开始提交Hello.txt到版本库中。

 

 

此时提交,我们会发现,显示提交失败。Hello.txt is out of date。B的版本是V4。而此时版本库中的版本因为A的提交已经变成了V5。此时会自动弹出窗口询问是否需要更新,我们选择更新就可以。

 

点击update后,会提示你,发生了冲突。

 

这时,B再看自己的个人工作副本中。会发现出现了很多不同版本的Hello.txt,有上个版本的V4的,目前版本库的版本V5,自己版本的mine.等等。

 

 看上述图片的左侧,会有红色的提示信息,告诉你Hello.txt这个文件发生了冲突。这是可以直接选择红色的冲突文件双击打开,也可以选择 Cancel,取消,然后在右键点击Hello.txt文件,选择TortoiseSVN——Edit conficts。

 

进来之后,可以发现我们发生冲突的文件。左边是版本库的版本,右边是自己的版本。最下面是融合协商之后修改的版本。

如果我们选择使用别人的版本,也就是目前版本库中的版本,则选择左侧,右键,Use this text block。右边同理。

 

 注意:这里,尽量不要用自己的去覆盖别人的东西。

也可以双方进行协商之后,作出修改,如下所示。,然后Mark as resolved标记解决。然后点击左上方的保存Save。

 

此时,我们再看B的个人工作副本。会发现,之前的冲突文件都没有了,只剩下了Hello.txt。打开该文件发现。里面的内容已经变成了上面修改内容

 

 

 

 这时候我们再次选择进行commit提交,就可以解决冲突的问题了。(右键,选择 commit)

 

 

如何降低冲突的发生?

1.当代码编辑完成后,尽快提交,多次提交更新,可以降低冲突发生的概率。也会降低冲突发生的复杂度。

2.在提交的时候,要做好注释,方便后期查找更新的原因。

3.每次都先提交,然后更新,每天早上打开都先从版本库获取最新版本,每天下班都必须将已经编辑过的文档都提交到版本库中。

 

相关文章

首先介绍下什么是git和svnGIT(分布式版本控制系统)Git(读音...
注意点:系统环境:centos7,python,django,svn,jenkins首先安装...
  我使用过的版本控制工具有两种:早期的时候使用的是SVN,...
用好Git和SVN,轻松驾驭版本管理本文从Git与SVN的对比入手,...
01.jenkins安装jenkins网站:https://jenkins.io/安装:资料...
软件环境:centos7jdk1.8svn1.9maven3.5tomcat8jenkins2.80 ...