SVN
次要内容
SVN 介绍
简介
SVN 全称 Subversion,是一个凋谢源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,当初倒退成为 Apache 软件基金会的一个我的项目,同样是一个丰盛的开发者和用户社区的一部分。
SVN 是一个凋谢源代码的 版本控制系统 ,治理着随工夫扭转的数据。这些数据搁置在一个地方材料档案库(repository) 中。这个档案库很像一个一般的文件服务器, 不过它会记住每一次文件的变动。这样你就能够把档案复原到旧的版本, 或是浏览文件的变动历史。说得简略一点 SVN 就是 用于多集体共同开发同一个我的项目,共用资源的目标。
次要作用
- 目录版本控制
Subversion 实现了一个“虚构”的版本控管文件系统, 可能依工夫跟踪整个目录的变动。目录和文件都能进行版本控制。
- 实在的版本历史
Subversion 中,能够减少(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、洁净的版本开始。
- 主动提交
一个提交动作,不是全副更新到了档案库中,就是齐全不更新。这容许开发人员以逻辑区间建设并提交变动,以避免当局部提交胜利时呈现的问题。
…
基本概念
- 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
- 双击安装程序 VisualSVN-Server-4.2.1-x64.msi
- 勾选复选框抉择批准,而后抉择 Next,抉择 Upgrade
- 抉择默认配置,抉择 Next
- 设置服务器的装置门路、资源的寄存目录及端口
- 应用默认配置,抉择 Next
- 如果呈现这个弹窗,抉择 Ignore 疏忽即可
- 期待装置,装置实现后可勾选复选框,而后抉择 Finish
- 呈现如下窗口,则示意装置胜利
装置 TortoiseSVN
- 双击安装程序 TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi
- 抉择 Next,而后勾选 command line client tools,抉择 Next
- 设置 TortoiseSVN 的装置门路,勾选 command line client tools
- 进入到 TortoiseSVN 软件应用协定界面,间接抉择 Install 进行装置
- 装置实现之后,间接抉择 Finish 即可
- 在任意空白中央,右键,呈现如下内容,则示意装置胜利
配置
阐明:服务器端须要提供 IP、端口、帐号、明码供客户端应用。即有如下配置
设置 IP 和端口
- 关上服务器,点击 VisualSVN Server,抉择 Configure authentication options…
-
设置 Server name,倡议应用以后 IP
Server name 的值能够设置为:1.127.0.0.1(只能本地本人拜访)2. 电脑用户名(只能本地本人拜访)3. 以后 IP(可能拼通 IP 的用户均可拜访)Server Port 应用默认值即可 查看以后 IP:关上 dos 窗口(Windows+ R 键),输出 ipconfig,按回车
新建账号密码
- 右键左侧菜单 User,抉择 Create User
- 设置用户的账户和明码
新建分组
- 抉择 Group 右键,抉择 Create Group…
- 设置分组名称,及为分组增加用户
SVN 应用
新建版本库
- 抉择 Repositories 右键,抉择 Create New Repository…
- 抉择默认设置,抉择下一步,设置仓库名称
- 设置仓库目录(抉择任意一个选项都可)
- 设置仓库的拜访权限(这里设置所有 svn 用户都有读 / 写权限)
- 仓库创立实现
签入我的项目到 SVN(import)
- 拷贝近程仓库的地址
- 抉择任意我的项目,右键抉择 TortoiseSVN,抉择 import
- 将上一步拷贝的仓库地址粘贴到地址栏
- 抉择永恒承受
- 输出用户账号和明码
- 导入胜利
- 仓库右键,抉择刷新,在服务器中看到的成果
检索我的项目(check out)
- 复制要下载的我的项目的近程地址
- 在须要检索我的项目的目录中,右键抉择 SVN Checkout…
- 输出近程地址,设置我的项目的寄存地位
- 检索实现
提交代码(commit)
- 新建文件,右键抉择 TortoiseSVN,抉择 Add,将文件增加到版本库列表
- 再次点击文件,右键,会呈现 SVN Commit…
- 提交胜利
更新代码(update)
- 如果以后资源不是最新版本,则可在我的项目中空白中央右键,抉择 SVN Update
- 更新胜利
版本抵触问题
版本抵触起因
假如 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
同时在指标文件中标记来自不同用户的更改。
版本抵触解决
场景
- 当初 A、B 两个用户都更新我的项目文件到本地。
用户 A
用户 B
- 我的项目中的 hello.txt 文件原始内容为:
- A 用户批改文件,增加内容“A 用户批改内容”,实现后提交到服务器
- B 用户批改文件,增加内容“B 用户批改内容”,实现后提交到服务器
- B 用户提交更新至服务器时提醒如下
- B 用户将文件提交至服务器时,提醒版本过期:首先应该从版本库更新版本,而后去解决抵触,抵触解决后要执行 svn resolved(解决),而后在签入到版本库。在抵触解决之后,须要应用 svn resolved(解决)来通知 subversion 抵触解决,这样能力提交更新。
解决抵触的三种抉择
- 放弃本人的更新,应用 svn revert(回滚),而后提交。在这种形式下不须要应用 svn resolved(解决)
- 放弃本人的更新,应用他人的更新。应用最新获取的版本笼罩指标文件,执行 resolved filename 并提交(抉择文件—右键—解决)。
- 手动解决:抵触产生时,通过和其余用户沟通之后,手动更新指标文件。而后执行 resolved filename 来解除抵触,最初提交。
解决抵触
- 在 B 用户当前目录下,右键抉择 ”SVN Update”,执行“update”(更新)操作
- B 用户中的 Hello.txt 文件呈现抵触
- 在抵触的文件上(选中文件–右键菜单—TortoiseSVN—Edit conflicts(解决抵触))
-
关上编辑抵触的窗口
Theirs 窗口为服务器上以后最新版本 Mine 窗口为本地批改后的版本 Merged 窗口为合并后的文件内容显示
- 如果要应用服务器版本,在 Theirs 窗口选中差别内容,右键,抉择 Use this text block(应用这段文本块)。
同理如果要应用本地版本,在协商后,在 Mine 窗口右键,抉择 Use this text block(应用这段文本块)。
- 批改实现后,抉择“Mark as resolved”(标记为解决),而后抉择 ”Save”(保留文件),敞开窗口即可
- 此时,以后抵触已解决,可再次抉择 “SVN Commit” 提交文件
注:也可先不标记为解决,间接保留文件后,在 B 用户的抵触目录下,选中文件—右键菜单—TortoiseSVN—Resolved(解决)。而后再提交文件。
如何升高抵触解决的复杂度
- 当文档编辑实现后,尽快提交,频繁的提交 / 更新能够升高在抵触产生的概率,以及产生时解决抵触的复杂度。
- 在提交时,写上明确的 message,不便当前查找用户更新的起因,毕竟随着工夫的推移,对当初更新的起因有可能会忘记
- 养成良好的应用习惯,应用 SVN 时每次都是先提交,后更新。每天早上关上后,首先要从版本库获取最新版本。每天上班前必须将曾经编辑过的文档都提交到版本库。
Idea 集成应用 SVN
配置 SVN 环境
- File —> Other Settings(全局配置;Settings 是部分配置)—> Version Control —> Subversion
-
配置 svn
找不到 svn.exe 文件,TortoiseSVN 的 bin 目录上面没有 svn.exe 之所以没有是因为装置 TortoiseSVN 的时候没有勾选指定装置项,增加 command line client tools
- 重启 Idea
检索我的项目
- 抉择 VCS —> Checkout from Version Control —> Subversion
- 增加近程仓库中我的项目的 URL
- 点击增加的 URL,抉择 Checkout
- 抉择检索的我的项目的寄存地位
- 抉择 Destination,依据本人的偏好抉择,其余配置默认,单击 OK
- 抉择 1.8 Format,点击 OK
- 曾经 check out 一个我的项目,是否要关上,抉择 Yes
- 抉择 Add
- 此时,我的项目就能够与近程仓库关联
提交代码
- 抉择 VCS —> Commit…
- 抉择须要提交的文件,填写提交信息,抉择 Commit
- 提交胜利后,会在 Idea 最上面显示提交状态
注:我的项目提交前,最好先更新,而后再提交。
更新代码
- 抉择 VCS —> Update Project…
- 默认即可,间接抉择 OK
- 更新胜利的提示信息
导入我的项目
- 抉择 VCS —> Import into Version Control —> Import into Subversion
- 抉择“+”增加我的项目导入的地址(可手动增加一个文件夹,我的项目中的文件会搁置在该文件夹中,文件名自定义)
- 抉择要导入的门路,抉择 Import
- 抉择要导入的我的项目,点击 OK
- 查看导入的门路,填写导入信息,抉择 OK
- 在近程仓库中查看是否导入胜利即可。
版本抵触问题
- 如果未更新,就提交资源(有其余用户也提交过资源),则提交失败
- 此时,执行更新操作,将其他人提交过的资源更新到本地,会提醒抵触
- 通常抉择合并,再抉择须要保留的代码,抉择好之后抉择 Apply
- 提醒更新胜利
- 再次抉择提交,胜利解决抵触