尚硅谷SVN版本控制软件教程(一套掌握svn操作)
学习时长:1小时46分钟
未学习
5.启动服务器
6.命令行
12.权限
开发中的实际问题
备份!代码还原!协同修改!多版本项目文件管理!追溯问题代码的编写人和编写时间!权限控制!版本控制简介
版本控制[Revision control],最初来源于工程设计领域,是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化, 以便将来查阅特定版本修订情况的系统。客户端/服务器模式——在服务器的版本库中保存项目文件的各个版本,所有参与协同开发的程序员在自己本地电脑上保存一个工作副本。SVN 支持程序员将本地副本更新到服务器端的最新版本,也支持将本地副本的最新改变更新到服务器端,而且后面的更新不会覆盖前面的更新,而是作为一个新 的版本被保存下来——SVN 甚至支持将本地工作副本恢复为服务器端保存的某一个历史版本。
检出(checkout):将一个服务器端创建好的项目整个下载到本地,这是到项目组后参与开发的第一步,只需执行一次。更新(update):将本地文件更新为服务器端的最新版本,通常为每天上班时提交(commit):将本地修改提交到服务器端。通常每天下班前或每实现一个功能、完成一个模块时执行一次。参考文章:【图文详解】入职必备——SVN使用教程
SVN官网:https://svnbucket.com/
①为什么要配置版本库?
Subversion 是将文件数据信息保存到版本库中进行管理的,为了满足用户的不同需求,Subversion 允许用户对版本库目录进行定制。
②在一个非中文无空格目录下创建一个文件夹,作为版本库的根目录。例如:D:\DevRepository\Subversion
③在版本库根目录下创建与具体项目对应的子目录——这样做的目的是使一个
SVN 服务器能够同时管理多个项目,而不是为每一个项目搭建一个 SVN 服务器——这显然太浪费资源了。
例如:D:\DevRepository\Subversion\CRM D:\DevRepository\Subversion\ERP D:\DevRepository\Subversion\OA
④创建版本库命令格式

⑤版本库目录结构
版本库创建成功后会在指定目录下产生如下的目录结构

1.Eclipse 插件应用市场
在 Eclipse 中访问 Eclipse Marketplace Client 可以搜索 Subversion,下载插件,按提示安装即可。
2.使用压缩包
如果不能联网可以使用下载好的插件压缩包 eclipse_svn_site-1.10.5.zip,这个压缩包是从 http://subclipse.tigris.org/网站(subclipse 是这款 Eclipse 插件的名称)上下载的。安装方法是:

共享项目
1.在 Eclipse 中创建的新项目想要发布到 SVN 服务器端,可以通过“共享”项目实现
2.在项目上点右键→Team→Share Project…→选择一种版本控制工具

选择一个资源库位置


切换到 Team Synchronizing 透视图,选择项目中要提交的内容,通常是项目中的全部内容

检出
检出(下载文件)分两种情况
1.从服务器端获取到的是一些零散的文件,不能作为项目检出

此时会弹出一个新建项目向导,之所以会这样是因为我们需要创建一个项目来保存从服务器端取回的文件

2.从服务器端获取到的是一个完整的项目
例如

此时必须作为项目检出


项目从服务器检出后,会成为一个工作副本,根目录下会自动创建.svn 隐藏目录
提交
更新
①更新整个项目时可以在项目上点右键→Team→更新
②更新某个具体的文件时,可以在文件上点右键→Team→更新
创建资源库位置
1.切换到透视图 SVN 资源库研究
2.创建资源库位置


此时可以查看版本库中的文件及目录结构
补充:如何确定版本库地址?

什么情况下会发生冲突

1.两个开发人员,Harry 和 Sally,分别从服务器端下载了文件 A。
2.Harry 修改之后,A 变成了 A’,Sally 修改之后,A 变成了 A’’。
3.Harry 先一步提交,使服务器端文件的版本也变成了 A’
4.Sally 本地的文件 A’’已经过时了,此时她已无法提交文件,服务器会要求她先进行一次更新操作。
5.此时 Sally 的更新操作有两种可能
(1) Sally 所做的修改与 Harry 不是同一个位置,更新操作尝试合并文件成功。
(2) Sally 所做的修改与 Harry 恰好是同一个位置,更新操作尝试合并文件失败, 发生冲突。
发生冲突后,本地工作副本会发生如下变化
(1)文件 A 中的内容发生如下改变
public static void main(String[] args) {
System.out.println("Edit By Command!");
System.out.println("Edit By Command!");
<<<<<<< .mine
System.out.println("Edit By Eclipse!");//本地文件
=======
System.out.println("Edit By Command!New Edit");//服务器文件
>>>>>>> .r14
System.out.println("Edit By Command!");
System.out.println("Edit By Command!");
}
其中,从mine 到=之间是发生冲突时本地副本的内容。从
=到r14 是发生冲突时服务器端的最新内容。注意这里 r 后面的数字是发生冲突时服务器端的版本号,有可能是任何整数值,r14 只是一个例子。
同时文件图标变成一个“黄色的!”。
(2)与冲突文件同目录下新增文件,扩展名为.mine,其内容是发生冲突时本地副本的文件内容。
(3)与冲突文件同目录下新增文件,扩展名为.r 小版本号,例如 MyCRM.java.r13, 其内容是冲突发生之前,服务器端的文件内容,可以作为解决冲突的参照。
(4)与冲突文件同目录下新增文件,扩展名为.r 大版本号,例如 MyCRM.java.r14, 其内容是冲突发生时,服务器端的文件内容。
解决冲突
(1)在冲突文件上点右键→Team→编辑冲突…→出现如下界面
Merged:合并(本地版本)
Theirs:他们的(服务器版本)

以对比的方式将本地内容与冲突内容显示出来,其中左侧为本地内容,右侧为冲突内容。其中本地内容是可以修改的。
(2)根据需要和实际情况将本地内容更正——这个过程很可能需要牵涉冲突的
两位开发人员进行必要的沟通——机器与程序目前还不能完全取代人工智能。更正后文件图标会变成一个“四角形”,同时冲突文件内的<<<<<<< .mine、======= 以及>>>>>>> .r14 等标记都会被去掉。
(3)在冲突文件上点右键→Team→标记为解决
随便选

此时.mine 文件和.r 版本号文件都会被自动删除,冲突文件的图标变为“*”,表示可以提交。文件本身变为解决冲突之后的状态。
(4)提交文件,文件图标变为“金色圆柱体”。
回复历史版本
1.在需要回复的文件上点右键→Team→显示资源历史记录→得到如下界面

2.选择某一个历史记录点右键→获取内容。文件就会恢复到指定版本的状态,同时图标变为“*”。
3.获取历史记录时,如果出现如下错误提示

可以通过将对应版本库中的 svnserve.conf 文件中的 anon-access 设置为 none 解决。
TortoiseSVN 简介
TortoiseSVN 是一个 Windows 下的版本控制系统 Apache™ Subversion®的客户端工具。

TortoiseSVN 的优良特性
①外壳集成
TortoiseSVN 无缝地整合进 Windows 的外壳(例如资源管理器)。
②重载图标
每个版本控制的文件和目录的状态使用小的重载图标表示,可以让你立刻看出工作副本的状态。
③图形用户界面
当你列出文件或文件夹的更改时,你可以点击任意版本查看提交注释。也可以看到更改过的文件列表 - 只要双击文件就可以查看更改内容。
提交对话框列出了本次提交将要包括的条目,每一个条目有一个复选框,所
以你可以选择包括哪些条目。未版本控制的文件也会被列出,以防你忘记添加新文件。
④Subversion 命令的简便访问
所有的 Subversion 命令存在于资源管理器的右键菜单,TortoiseSVN 在那里添加子菜单。
①创建一个目录用来存放检出得到的文件,例如 MyCRM
②进入目录 MyCRM,点右键



③可以看到检出得到的文件

此时文件图标上没有任何标识。可能你会想到通过重启电脑的方式解决这一问题——其实不用这么麻烦。文件图标是受外壳程序控制的,我们只需要重启外壳程序——explorer.exe 就可以了。打开任务管理器,选中 explorer.exe 进程,结束进程,然后新建进程 explorer.exe 就可以了。
如果一切顺利的话,你会看到文件图标变成了这样:


①新建文件 abc.txt
②在文件上点右键

③添加后文件图标发生变化

1.使用 TortoiseSVN 可以提交具体某一个文件,或某一个目录下的所有改变。方法就是在想要提交的项目下点右键,然后 SVN Commit…,就可以看到如下界面

2.日志内容如果不填,TortoiseSVN 会提交一个空字符串作为日志信息。
3.提交后显示信息如下

4.没有纳入版本控制的文件默认是不在提交范围内的,直接在新创建的文件上点右键只能看到 add 操作的选项,如前所述。但在新创建的文件所在目录点右键选择 SVN commit…,可以看到如下界面

将文件 newFile.txt 选中

同样可以提交文件,TortoiseSVN 会帮我们自动将 newFile.txt 纳入版本控制

在要更新的文件或目录上点右键→SVN Update

①查看历史版本内容
[1]首先需要把对应版本库的匿名访问权限设置为 none:anon-access = none
[2]在要查看历史版本的文件上点右键→TortoiseSVN→Show log

[3]在感兴趣的历史版本上点右键,可以与当前工作副本进行比较,或直接打开。

②在要回复历史版本的文件上点右键→Update to revision

填上想要回到的版本即可

1.文件发生冲突时的状态和在 Eclipse 中一样,这里就不赘述了。
2.在冲突的文件上点右键→Edit Conflicts
Theirs:远程文件
Mine:本地文件
Merged:已合并文件

3.有“叹号”的行是发生冲突的行

4.在冲突行点右键

可以选择四种操作:
[1]使用他们的:from ‘theirs’
[2]使用我的:from ‘mine’
[3]把我的放在他们的前面:from ‘mine’ before ‘theirs’
[4]把他们的放在我的前面:from ‘theirs’ before ‘theirs’
5.在冲突解决后,直接保存——这时 TortoiseSVN 自动弹出如下确认界面
冲突解决
保留冲突

6.文件变为红色叹号标志,自动生成的三个文件被删除。提交修改即可。