SVN

SVN

主要内容

SVN介绍

简介

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

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

主要做用

  1. 目录版本控制

    Subversion 实现了一个 “虚拟” 的版本控管文件系统, 可以依时间跟踪整个目录的变更。 目录和文件都能进行版本控制。安全

  2. 真实的版本历史

    Subversion中,能够增长(add)、删除(delete)、复制(copy)和重命名(rename),不管是文件仍是目录。全部的新加的文件都从一个新的、干净的版本开始。服务器

  3. 自动提交

    一个提交动做,不是所有更新到了档案库中,就是彻底不更新。这容许开发人员以逻辑区间创建并提交变更,以防止当部分提交成功时出现的问题。svn

    this

基本概念

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

工做流程

开始新一天的工做.net

一、从服务器下载项目组最新代码。(Checkout
二、若是已经Checkout而且有人已Commit了代码,你能够更新以得到最新代码。(Update开放源代码

三、进入本身的分支,进行工做,每隔一个小时向服务器本身的分支提交一次代码(不少人都有这个习惯。由于有时候本身对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时本身修改了哪些代码,就须要这样作了)。(Commit版本控制

四、下班时间快到了,把本身的分支合并到服务器主分支上,一天的工做完成,并反映给服务器。(Commitcode

注意:若是两个程序员同时修改了同一个文件 _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

  1. 双击安装程序 VisualSVN-Server-4.2.1-x64.msi
  2. 勾选复选框选择赞成,而后选择 Next,选择 Upgrade
  3. 选择默认配置,选择 Next
  4. 设置服务器的安装路径、资源的存放目录及端口
  5. 使用默认配置,选择Next
  6. 若是出现这个弹窗,选择 Ignore 忽略便可
  7. 等待安装,安装完成后可勾选复选框,而后选择 Finish
  8. 出现以下窗口,则表示安装成功

安装 TortoiseSVN

  1. 双击安装程序 TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi
  2. 选择 Next,而后勾选 command line client tools,选择 Next
  3. 设置TortoiseSVN的安装路径,勾选 command line client tools
  4. 进入到TortoiseSVN软件使用协议界面,直接选择 Install 进行安装
  5. 安装完成以后,直接选择 Finish 便可
  6. 在任意空白地方,右键,出现以下内容,则表示安装成功

配置

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

设置IP和端口

  1. 打开服务器,点击 VisualSVN Server,选择 Configure authentication options…
  2. 设置Server name ,建议使用当前IP

    Server name的值能够设置为:
        1.127.0.0.1 (只能本地本身访问)
        2.电脑用户名(只能本地本身访问)
        3.当前IP(可以拼通IP的用户都可访问)
    Server Port使用默认值便可
    
    查看当前IP:
        打开dos窗口(Windows+R键),输入ipconfig,按回车

新建帐号密码

  1. 右键左侧菜单 User,选择 Create User
  2. 设置用户的帐户和密码

新建分组

  1. 选择 Group 右键,选择 Create Group…
  2. 设置分组名称,及为分组添加用户

SVN使用

新建版本库

  1. 选择 Repositories 右键,选择 Create New Repository…
  2. 选择默认设置,选择下一步,设置仓库名称
  3. 设置仓库目录 (选择任意一个选项均可)
  4. 设置仓库的访问权限(这里设置全部svn用户都有读/写权限)
  5. 仓库建立完成

签入项目到SVN(import)

  1. 拷贝远程仓库的地址
  2. 选择任意项目,右键选择 TortoiseSVN,选择 import
  3. 将上一步拷贝的仓库地址粘贴到地址栏
  4. 选择永久接受
  5. 输入用户帐号和密码
  6. 导入成功
  7. 仓库右键,选择刷新,在服务器中看到的效果

检索项目(check out)

  1. 复制要下载的项目的远程地址
  2. 在须要检索项目的目录中,右键选择 SVN Checkout…
  3. 输入远程地址,设置项目的存放位置
  4. 检索完成

提交代码(commit)

  1. 新建文件,右键选择 TortoiseSVN,选择 Add,将文件添加到版本库列表
  2. 再次点击文件,右键,会出现 SVN Commit…
  3. 提交成功

更新代码(update)

  1. 若是当前资源不是最新版本,则可在项目中空白地方右键,选择 SVN Update
  2. 更新成功

版本冲突问题

版本冲突缘由

​ 假设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

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

版本冲突解决

场景
  1. 如今A、B两个用户都更新项目文件到本地。

    用户A

    用户B

  2. 项目中的 hello.txt 文件原始内容为:
  3. A用户修改文件,添加内容 “A用户修改内容” ,完成后提交到服务器
  4. B用户修改文件,添加内容 “B用户修改内容” ,完成后提交到服务器
  5. B用户提交更新至服务器时提示以下
  6. B用户将文件提交至服务器时,提示版本过时:首先应该从版本库更新版本,而后去解决冲突,冲突解决后要执行svn resolved(解决),而后在签入到版本库。在冲突解决以后,须要使用svn resolved(解决)来告诉subversion冲突解决,这样才能提交更新。
解决冲突的三种选择
  1. 放弃本身的更新,使用svn revert(回滚),而后提交。在这种方式下不须要使用svn resolved(解决)
  2. 放弃本身的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。
  3. 手动解决:冲突发生时,经过和其余用户沟通以后,手动更新目标文件。而后执行resolved filename来解除冲突,最后提交。
解决冲突
  1. 在B用户当前目录下,右键选择"SVN Update",执行“update”(更新)操做
  2. B用户中的 Hello.txt 文件出现冲突
  3. 在冲突的文件上(选中文件–右键菜单—TortoiseSVN—Edit conflicts(解决冲突))
  4. 打开编辑冲突的窗口

    Theirs窗口为服务器上当前最新版本
    Mine窗口为本地修改后的版本
    Merged窗口为合并后的文件内容显示
  5. 若是要使用服务器版本,在Theirs窗口选中差别内容,右键,选择Use this text block(使用这段文本块)。

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

  6. 修改完成后,选择 “Mark as resolved”(标记为解决),而后选择"Save"(保存文件),关闭窗口便可
  7. 此时,当前冲突已解决,可再次选择 "SVN Commit"提交文件

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

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

Idea集成使用SVN

配置SVN环境

  1. File —> Other Settings(全局配置;Settings是局部配置) —> Version Control —> Subversion
  2. 配置svn

    找不到svn.exe文件,TortoiseSVN的bin目录下面没有svn.exe
    
    之因此没有是由于安装TortoiseSVN的时候没有勾选指定安装项,添加command line client tools
  3. 重启Idea

检索项目

  1. 选择 VCS —> Checkout from Version Control —> Subversion
  2. 添加远程仓库中项目的URL
  3. 点击添加的URL,选择 Checkout
  4. 选择检索的项目的存放位置
  5. 选择Destination,根据本身的偏好选择,其余配置默认,单击 OK
  6. 选择 1.8 Format,点击 OK
  7. 已经check out一个项目,是否要打开,选择 Yes
  8. 选择 Add
  9. 此时,项目就能够与远程仓库关联

提交代码

  1. 选择 VCS —> Commit…
  2. 选择须要提交的文件,填写提交信息,选择 Commit
  3. 提交成功后,会在Idea最下面显示提交状态

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

更新代码

  1. 选择 VCS —> Update Project…
  2. 默认便可,直接选择 OK
  3. 更新成功的提示信息

导入项目

  1. 选择 VCS —> Import into Version Control —> Import into Subversion
  2. 选择 “+” 添加项目导入的地址(可手动添加一个文件夹,项目中的文件会放置在该文件夹中,文件名自定义)
  3. 选择要导入的路径,选择 Import
  4. 选择要导入的项目,点击 OK
  5. 检查导入的路径,填写导入信息,选择 OK
  6. 在远程仓库中检查是否导入成功便可。

版本冲突问题

  1. 若是未更新,就提交资源(有其余用户也提交过资源),则提交失败
  2. 此时,执行更新操做,将其余人提交过的资源更新到本地,会提示冲突
  3. 一般选择合并,再选择须要保留的代码,选择好以后选择 Apply
  4. 提示更新成功
  5. 再次选择提交,成功解决冲突
相关文章
相关标签/搜索