SVN的基本使用

1、SVN的基本介绍

Subversion(SVN) 是一个开源的版本控制系統,它管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

SVN 的一些概念:

  • repository(源代码库):源代码统一存放的地方
  • Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份
  • Commit(提交):当你已经修改了代码,你就需要Commit到repository
  • Update (更新):当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更

日常开发过程其实就是这样的(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) -->作出自己的修改并调试成功 --> Commit(大家就可以看到你的修改了) 。

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

 

1.1、SVN和TortoiseSVN的安装

svn的安装参考:https://www.runoob.com/svn/svn-install.html

TortoiseSVN的安装参考:https://www.runoob.com/svn/tortoisesvn-intro.html。分享TortoiseSVN的网盘下载地址链接:https://pan.baidu.com/s/1fEUz_Gfjr4cuK5FyvRvhEw  提取码:jq0d

TortoiseSVN是SVN的版本控制系统的一个客户端,便于更加简单地使用SVN,TortoiseSVN安装完后,在电脑点击右键可以看到SVN checkout等一些SVN的操作信息,如下图:

可以直接通过 TortoiseSVN -- Repo-browser(即版本库浏览器),然后输入 SVN 的 url 地址来访问到 SVN,而不必将 SVN 检出到本地当中。

 

2、创建版本库(源代码库)

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

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

 

3、检出(checkout)

Checkout 操作用来将源代码库的文件都复制到本地当中,在本地可以进行内容的修改,然后提交到源代码库中。

咱们可以通过SVN的右键菜单【Checkout】操作来从SVN服务器上将项目内容获取到本地系统文件夹中:

 

4、更新(update)

顾名思义,update 操作是用来更新版本库的。这个操作将工作副本与版本库进行同步。由于版本库是由整个团队共用的,当其他人提交了他们的改动之后,你的工作副本的版本就会落后于源代码库的版本。

我们建议在每次进行文件操作之前,先获取服务器上的新文件。使用方式就是在本地文件夹中,点击鼠标右键,选择【SVN Update】菜单,svn就会自动从服务器上获取新文件,并自动合并到本地文件

 

5、执行变更

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

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

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

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

5.1、新建了文件(add)

如果您在本地添加了一个文件,在SVN Commit的界面可能会看到UNversion,意思就是,暂时没有加入到版本控制的文件。那么,您可以先右键选中这个文件,右键选择【SVN Add】

 

6、查看变更

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

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

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

 

7、解决冲突

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

7.1、如何解决冲突

多个人同时修改了同个文件中的同一行代码或者遇到无法进行对比的二进制文件,比如图片等时,SVN就很容易出现冲突的情况。

 如上图,test_conflict.py文件发生了冲突,并且多出了几个文件,其中.mine是我本地修改了还没提交的版本,.r2文件是上一个版本的文件,.r1是上上个版本的文件。

我们先选中冲突文件,右键可以看到以下选项:

有几个选项我们来看下:

Edit confilicts:修改冲突,可以对冲突的行进行内容选择,后面我们详细说。

Mark as resolved:直接标记为已解决,这样会删除.mine、.r1、.r2这些文件,但这只是标记,如果你直接标记为解决,实际上文件还是冲突的,只是状态修复了。

Resolve conflict using 'theirs':使用他的提交覆盖我的修改来解决冲突。如果你的修改不需要提交,你可以方便的选择这个。

Resolve conflict using 'mine':使用我本地的版本覆盖他的来解决冲突。如果对方提交的代码没什么用,你可以直接使用这个来解决。

 

Edit confilicts这个选项就是用来手动解决冲突的,下面详细讲解:

 上图是编辑冲突的界面,如果你的界面显示了很多空白符号,你可以点击顶部的“Show Whitespaces”来隐藏。

上图的左边.r2展示的是上个版本的变化,右边.mine是我们本地修改的版本,下面是表示合并后的效果。

左上的第12行下面的绿色等号表示这行被删除了,13、14行前面的+号表示这两行是新增的

右上的同样也是删除了一行,然后增加了第13行

下面区域的13,14行显示的是红色背景的问号,表示这两行SVN不知道如何合并代码。

假设我们需要13行保留我为我本地的修改,14行使用他人提交的。那么选中右上的第13行,右键选择“Use this text block”,表示使用这行的代码;

 选中左上的14行,右键选择“Use this text block”。这样就搞定了,下面区域会显示合并后的效果

这样下面区域的冲突行就全部解决了,点击顶部工具栏的“Mark as resolved”标记为已解决好冲突,或者直接ctr+s保存也会提示“Mark as resolved”菜单。

到这冲突就完美解决了。

这里再解释下右键冲突行显示的其他的一些菜单项:

Use this text block:使用这块代码为合并后的行

Use this whole file:使用这整个文件作为合并后的文件

Use text block from 'mine' before 'theirs':两边的代码都保留,我的代码在前面

Use text block from 'theirs' before 'mine':两边的代码都保留,我的代码在后面

参考:https://segmentfault.com/a/1190000014294501?utm_source=tag-newest

 

8、提交更改(commit)

当修改文件后,想要提交到服务器上,就可以使用【SVN Commit】右键菜单。Commit 操作是用来将更改从工作副本到版本库。这个操作会修改版本库的内容,其它开发者可以通过更新他们的工作副本来查看这些修改。

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

 

在SVN Commit界面,上面的空白框是用于输入提交的版本信息,当然也可以什么都不写。在SVN Commit界面的下方,勾选您想要提交的文件,点击下方的【OK】按钮,就可以开始提交服务器了。

 

某些情况下,当文件出现一些异常的时候,SVN会提示您,需要先【Clean up】清理一下SVN的目录缓存。这个时候,就在文件夹中点击鼠标右键,选择【TortoiseSVN】选项,然后选择【Clean up】选项即可

 

9、SVN和GIT的区别

SVN在没有联网的情况下不能进行版本管理,而 Git 就可以。

虽然SVN在没有联网时也可以进行本地修改,但是并不能进行 commit 操作,本地可以写代码 本地进行代码管理,svn 的 commit 是直接送到服务器的,所以说在没联网时没法进行版本管理。

而 git 的 commit 是本地的,你只有进行 push 操作才会把这次更迭同步到服务器上。在没网的时候,git 本地也是一个完整的版本库,你可以进行全套版本管理。

 

SVN的基本使用:https://jingyan.baidu.com/article/656db9181137e2e380249c55.html

 

10、VisualSVN server 服务端的使用

VisualSVN server 服务端是用来搭建 SVN 仓库的,下载地址:https://pan.baidu.com/s/1Fzog_Nt2PbVUzsECJ4npeQ,提取码:99dl

使用教程可参考:https://www.cnblogs.com/pungwe/p/10566821.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-01-17 17:28  wenxuehai  阅读(746)  评论(0编辑  收藏  举报
//右下角添加目录