SVN

次要内容

SVN介绍

简介

SVN全称Subversion,是一个凋谢源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,当初倒退成为 Apache 软件基金会的一个我的项目,同样是一个丰盛的开发者和用户社区的一部分。

SVN是一个凋谢源代码的版本控制系统,治理着随工夫扭转的数据。这些数据搁置在一个地方材料档案库(repository) 中。 这个档案库很像一个一般的文件服务器, 不过它会记住每一次文件的变动。 这样你就能够把档案复原到旧的版本, 或是浏览文件的变动历史。说得简略一点SVN就是用于多集体共同开发同一个我的项目,共用资源的目标

次要作用

  1. 目录版本控制

    Subversion 实现了一个 “虚构” 的版本控管文件系统, 可能依工夫跟踪整个目录的变动。 目录和文件都能进行版本控制。

  2. 实在的版本历史

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

  3. 主动提交

    一个提交动作,不是全副更新到了档案库中,就是齐全不更新。这容许开发人员以逻辑区间建设并提交变动,以避免当局部提交胜利时呈现的问题。

基本概念

  • 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, 抵触,须要手动确认。_

生命周期

创立版本库

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

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. 再次抉择提交,胜利解决抵触