乐趣区

关于svn:SVN

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