为什么需要版本控制软件

  • 代码的冻结

    • 避免在重大的考核之前改动代码
    • 每个稳定版本都在服务器保存进度,随时可以回退
  • 需求频繁的变化不要改动稳定的代码,不要改别人写好的代码
    • 为什么需求会变化?有时候产品自己也是迷糊的,也不知道想要什么。频繁改动会导致工期长,不能按时交货。
    • 破解方式:提前准备几套设计方案,跟需求方确定好要使用的版本,后期如果再改需求就加钱。
  • 限制代码权限。
    • 对代码分模块开发,每个人可以读取的模块不一样,有人可以处理Android端,有人可以处理iOS端,有人处理服务端数据库,有人处理服务器API,这样就没有人能一次性将公司的所以资源拿走
  • 项目管理,工作量统计:
    • 有个bug,找出来一行有影响的代码,注释掉后bug消失了,统计了一个bug;过两天发现由于注释掉的哪行代码引出了更多了bug,你偷偷摸摸的把代码又改回去,新 bug消失了,旧 bug 暂时还没测试出来,于是这两天就是把一行代码注释掉又还原,结果工作统计上算你解了两个bug。
  • 常见的版本控制软件:
    • cvs 已经过时,基本没人用了
    • svn ,当前的版本控制主力,今天的主要学习内容
    • git ,linux社区大神开发,正在逐渐变得流行,是目前最好的版本控制软件

虚拟机的安装

  • 如果我们在真机里安装服务器,万一失败了不好处理。而虚拟机可以完整的模拟一台电脑,当虚拟机运行起来之后,相当于在在电脑里开了一个新电脑,如果发生错误,也不会影响真实电脑,比较适合用来做测试。避免错误的操作影响当前正在使用的系统。等挨虚拟环境使用熟练之后可以再到真机里安装软件。
  • 创建虚拟机,安装操作系统

SVN 服务器的安装

  • 直接拖拽安装文件到虚拟机
  • 选择版本:企业版收费,标准版不收费,选择标准版
  • 选择:软件安装、仓库位置、访问端口号,保持默认值
  • 是否安装成功
    • 在虚拟机验证:https://127.0.0.1:443 显示“Welcome to VisualSVN Server”
    • 验证主机是否可以访问:设置虚拟机的ip为教室网段的固定地址(比如:192.168.1.254)
    • 公司里也是一样的服务器,只是他们的服务器一般有一个公网的网址,可以在家里也访问
    • 主机要想访问到虚拟机服务器,需要设置网络为桥接网卡,下面的硬件选择有线网卡
  • 创建代码库安装客户端,关联客户端和代码库
    • 创建新仓库 MobileSafe
    • 选择仓库类型:空仓库
    • 选择权限:自定义。并创建两个新用户,一个班主任的名字可读可写;一个肖学升是老板,只可读

SVN 客户端的安装

  • 在新建的虚拟机上安装客户端 TortoiseSVN
  • 安装时一定要勾选:command line client tools
  • 是否安装成功;
    • 在桌面上点击右键,显示 SVN 相关的菜单

单用户代码的控制

关联代码仓库

  • 客户端创建文件夹来存放代码
  • 从服务端右键复制仓库地址
  • 在客户端菜单选择 SVN Checkout,将服务器的主机名换成 服务器的 IP 地址
  • 确认检出,并接受权限验证,输入班主任账号密码,成功后将具备可读写的权限
  • 是否已经关联:
    • 设置文件夹选项,显示所有文件和文件夹
    • 在代码文件夹下有一个 .svn 文件夹
    • 还可以发现当前文件夹有一个绿色对勾的标识。如果看不到可以刷新一下。还是看不到可以重启电脑或重启资源管理器。

上传代码

  • 客户端新建一个文件(比如 mobilesafe.txt),刷新可以看到一个蓝色问号,标识这个文件表示服务器没有这个文件。在文件上点击右键,选择SVN - > add,文件图标变成蓝色加号,表示这个文件可以被上传到服务器

    • 修改文件内容 ,简单的 hello world 代码
  • 再次在文件上点击右键,可以看到多了一个 Commit 选项,点击可以提交文件到服务器。
    • 输入提交日志:小子们,姑奶奶的第一份代码提交了
    • 下方的文件夹列表有要提交的文件
    • 点击提交,输入用户名和密码。这里可以点击保存密码,就不需要重复输入了。
    • 文件提交后,图标变成绿色对勾的标识,表示该文件和服务器的版本一样
    • 是否提交成功:刷新服务器仓库,可以看到新文件

修改代码

  • 在 mobilesafe.java 文件增加一行代码,图标变为红色感叹号,表示代码和服务器不一致。
  • 在文件上右键看到有 update 和 commit。update 用于在多人合作的开发,待会练习多人操作时再用。
  • 下方的文件列表里,双击可以看到变化的代码行
  • 继续使用 commit 提交代码,输入提交日志:姑奶奶又来提交代码了,好像已经很顺手了呢。

查看历史日志信息

  • 在文件上点击右键,SVN - > show log

    • 选中任意版本历史,可以看到被修改的文件,双击文件可以看到被修改的代码
    • 在文件上点击右键,选择 save revertion to -> 可以将该版本的文件导出。查看导出的文件可以看到原先的代码。

从服务器重新同步代码

  • 班主任毕竟是是个新手,某天电脑中毒,重装了系统,代码全部丢失,需要将代码找回来
  • 将客户端代码全部删除。
  • 因为代码在服务器上,只要重新关联服务器,就能拿到所有的的代码
  • 新建文件夹,并再次 checkout 代码,可以看到获取到了最新的代码。

验证权限控制功能

  • 在虚拟机新建文件夹2,使用肖学升的账号同步代码,肖学升作为不懂代码的老板,只要看看就行了,不要改动代码checkout 服务器代码,并使用肖学升的账号和密码

    • 由于之前已经记录了班主任的账号密码,需要清除账号才能使用新账号
    • 桌面上点击右键 --> SVN --> Settings --> Save Data --> 将所有数据都 clear
  • 修改代码,可以看到代码变为红色感叹号,也就是文件和服务器不一致。
  • 点击右键选择 commit ,随便输入日志或者不输入都可以,点击提交,可以看到出现红色错误提示提交失败。Commit Failed( details follow;Post of 'path' :403 Forbidden)
  • 这就是因为肖学升没有写权限

以上就是单用户的时候的版本控制方法

版本库的备份和还原

  • 如果服务器也要重装系统,就需要将服务器数据备份,当重装后还原数据
  • 查看服务器数据 c:/responestor。将 MobilePlayer 文件夹复制出来,那就是备份文件
  • 删除服务器仓库,相当于服务器重装了
  • 在服务器的 Repositories 点右键 --> 所有任务 --> import Existing Respository,选择刚刚备份的服务器数据,点击确定后可以看到服务器数据被重新找回

多用户代码的控制

仓库初始化

  • 新建仓库 MobilePlayer2,添加班主任和肖学升,都是可读可写权限

多用户的代码初始化

  • 在真机上创建文件夹 workspace ,checkout 一份源码,使用肖学升账号登陆并保存密码,出现 .svn 文件夹说明关联成功

    • 创建一个 MobileSafe.java 文件,写入伪代码,表示这个一个作为引导界面的类。此时显示为蓝色问好。
    • add 到版本库,此时显示为蓝色加号
    • commit 到服务器,日志信息为:肖学升初始化了引导界面。此时显示为绿色对勾。
  • 在用户虚拟机上创建 workspace 文件夹,checkout 源码,并使用班主任的账号密码。
    • 可以看到检出代码成功后出现了 .svn 文件夹和 MobileSafe.java 文件,打开文件可以看到就是最新的源码内容

正常的多用户代码更新

  • 在主机上修改文件,日志信息为:肖学升更换了引导页图片。并提交到服务器
  • 在虚拟机上获取最新代码,在源码文件夹里点右键,选择 update。可以看到最新的代码
  • 虚拟机上修改代码,并提交
  • 主机上更新代码,可以看到最新代码

多用户代码的冲突方式1

  • 主机上再次修改文件,并提交到服务器
  • 虚拟机上不更新文件,而是修改并提交文件。此时会出现 out of date ,you have to update your working copy first 的错误,也就是说文件过时无法提交文件。工作里出现代码冲突是很讨厌的的事,但是很难完全避免,如果想要尽量减少冲突只能是 经常更新到最新的代码
    • 点击 OK 之后,自动提示需要更新 ,点击 update。提示有文件冲突
    • 再看文件夹,文件图标变成了黄色感叹号,同时出现了三个不同后缀的文件
    • 打开源码文件,可以看到有先前肖学升的代码,也有班主任的代码
    • 由于同一行代码被两个人一起修改,版本控制系统不知道应该记录谁的版本,因此产生了冲突。
    • 解决方法是:在文件上右键 --> SVN --> Edit conflicts。弹出来的对话框可以看到有冲突的代码。
    • 界面有三个部分,一个是服务器的代码,一个是本地提交的代码,一个是合并后的代码预览。
    • 合并窗口里显示为问号的就是有冲突的代码
    • 在服务器代码或者本地代码上点右键可以选择 Use this text block ,看到合并窗口里问号变为选择的代码。-- 为了能完整的操作练习,这里选择使用本地的代码。
    • 此时冲突不存在了,可以点击保存,关闭窗口
    • 此时代码文件夹里那三个不同后缀的文件就不存在了
    • 查看代码文件只有最新代码,再 commit 可以正常提交代码到服务器

多用户代码的冲突方式2

  • 主机里更新到最新的代码,然后修改代码,并提交
  • 虚拟机里不更新代码,就直接修改,并提交
  • 再次出现冲突,update 代码,出现三个处理冲突的临时文件
  • 在冲突文件上点击右键 --> SVN --> reslover --> 系统自动进行代码合并,处理冲突的三个临时文件消失
  • 打开源码文件可以看到冲突的代码,手动编辑,只保留需要的代码
  • 此时认为代码已经合并,可以直接 commit 新代码到服务器
  • 公司里减少冲突的解决办法:多个员工分模块开发,减少修改同一个文件的可能性。

SVN 常见图标

  • 绿色对勾:和服务器关联成功,提交代码成功
  • 蓝色问号:服务器不知道有这个文件
  • 蓝色加号:计划将文件提交到版本库
  • 红色感叹号:代表文件被修改了,改动还没提交到版本库
  • 黄色感叹号:出现了冲突
  • 灰色对勾:文件只读--功能不稳定,工作里很少用
  • 小锁图标:文件被锁定 -- 功能不稳定,工作里很少用

SVN 提交代码的原则

  • 先更新再提交
  • 多提交
  • 不要提交编译不通过的代码
  • 每次提交要写明清晰的注释
  • 不要提交自动生成的文件 -- 一会处理Android代码时演示
  • 分模块开发,尽量不要改动别人模块的代码。
  • 慎用锁的功能

使用 SVN 管理 Android 项目

  • 在服务器新建版本库 AndroidTest,用户肖学升和班主任有读写权限
  • 在真机上使用 Eclipse 新建 Android 工程
  • 关联普通文件夹的步骤:新建文件夹并右键 Checkout。生成了.svn 文件夹说明关联成功
  • 关联 Android 项目:将文件添加到版本库:选中 .svn 以外的所有文件,右键 --> SVN -->Add。可以看所有文件都变成了蓝色加号
    • 将普通文件夹的 .svn 文件夹复制到项目的文件夹下。可以看到所有的文件都变成了蓝色问号
    • 也可以直接在项目文件夹里 checkout
  • 提交代码到版本库:选中 .svn 以外的所有文件,右键 --> SVN --> commit 。可以看到所有文件变成了绿色对勾
  • 刷新服务器的文件夹,可以看到提交的代码
  • 打开 MainActivity 并在 onCreate 方法打印方法名。打开项目文件夹,可以看到 bin 和 src 目录都变成红色感叹号,也就是都发生了变化。
  • 提交变化的代码,选中两个红色目录并右键 commit。图标变成绿色对勾。查看 log 可以看到提交信息。选中最新的提交,可以看到变化了 src 下的 MainActivity.java 和 bin 下的 MainActiivity.class,bin 目录下的变动是自动生成的,并且提交到版本库也没法看出变更了什么。所以,自动生成的数据不需要添加到版本库。
  • 忽略掉不需要提交的文件,选中文件后点击右键 --> SVN --> Unversion and add to igonre list --> Delete and ignore 2 items by name;更新项目并提交,让服务器知道这两个文件不需要进行版本管理
  • 再修改 MainActivity 代码,可以看到只有 src 文件夹变成红色
  • 现在是每次改代码都要打开文件夹,再提交代码,比较繁琐,待会可以使用Android Studio来进行操作。

SVN 的标准目录结构

  • 查看 PPT 里 Trunk、Branches、Tags 的简单介绍

  • 在服务器新建版本库

    • 选择类型的时候使用带有 trunk、branch、tags 的版本库。
    • 其他设置和之前一样。可以看到创建的版本库自带了以上三个文件夹。
  • 查看 PPT:版本控制项目实例 -- 沫沫

  • 新建开发项目

    • 在真机新建 momo 文件夹存放沫沫的源码,checkout 关联版本库服务器 truck 文件夹

    • 创建 momo.java,写一些伪代码

    java if(点击按钮) sout("给你一个好友,聊天去吧");

    • 右键 add 到版本库,并 commit,日志信息为 :1.0 功能开发完成,功能已经稳定
  • 设置里程碑

    • 在文件夹里右键 --> SVN -->Repo-Browser。打开的窗口 可以看到和服务器相同的目录结构
    • 选择 trunk ,右键选择 copy to,文件路径指定为 tags/1.0 文件夹。记录日志为:1.0 里程碑,聊天功能稳定
  • 增加了一个大功能,再次创建里程碑

    • 从 1.0 版本跳跃到 1.3,由于内部测试里 1.2 版本只是修复 bug 没有亮点,导致没有发布,1.3 版本出现了摇一摇是个大功能,才发布了新版本

    • 修改代码

    ```java // 原有代码

    // 新代码 if(摇一摇) sout("摇出来一个好友,聊天去吧") ```

    • 提交代码,日志为:摇一摇功能开发完成了

    • 项目文件夹里点击右键 --> SVN --> Browser。打开的窗口选择 trunk 文件夹,右键选择 copy to,文件路径设置为 tags/1.3。注释为 1.3 里程碑,摇一摇功能代码已稳定

  • 开发过程中的bug修复

    • 由于摇一摇版本大获成功,公司老板拿到了一大笔钱,给所有员工发了十万块钱,给了一个月假,让各位放松放松。

    • 结果正在去泰国的飞机上的时候,老板打来电话,紧急召所有人员归位。因为之前开发的时候,判断条件是点击按钮就给推荐好友,没有区分性别,结果会出现同性的好友推荐。现在由于在英国的软件审核十分严格,导致摇一摇的版本不能上线,都在使用1.0版本,现在统计发现全都是gay,需要在 1.0 版本的判断条件上添加性别处理。

    • 从服务器复制 tags/1.0 的路径,在虚拟机里新建 momo 文件夹,检出服务器 1.0 版本的代码

    • 修改代码

    java if(点击按钮 判断性别) sout("给你一个好友,聊天去吧")

    • 右键提交代码。可以看到提交的地址是 tags 目录。确定提交的时候出现警告,提交代码时需要在一个 branch 或者 trunk 上才行。

    • 删除错误的目录

    • 在真机的初始代码里点击右键 --> SVN -->Repo-Browser;右键 tags/ 1.0 选择 copy to,路径为 branch/1.0

    • 从服务器复制 branch/1.0 的路径;在虚拟机里新建 momo 文件夹,并 checkout 该分支的代码

    • 同样的修改代码后提交。可以正常提交,也就是在 分支 1.0 上做了一个bug 修复

  • 公司开发 1.4 版本,增加了新功能,并希望将之前修复bug 的代码合并进来

    • 修改真机项目的源码
    • if(你随便想一个名字) sout("你们已经成为好友了")
    • 项目文件夹里点击右键,选择 merge。选择合并的路径为 branch/1.0 。确定进行合并。合并成功后打开源码文件,可以看到 性别判断 的代码被合并进来了。
    • 此时再提交代码到服务器就完成了 1.4 版本的开发。
  • 这个目录结构可以让我们的项目管理更正规,但是在实际工作里由于这种方式太过复杂,很多公司都是建立空仓库

版本控制SVN的更多相关文章

  1. iOS开发——开发实战篇&版本控制SVN和Git使用详解

     版本控制SVN和Git使用详解     公司的实际开发中,在天朝使用较多的还是SVN,因为SVN是集中式的,在天朝上班你们都懂的!     -----------------svn--------- ...

  2. 【版本控制——svn】

    reposity_name   //版本库 { Passwd //验证密码文件 Authz //权限控制 Server.conf //主配置 } Authz //权限控制 //由[groups]标签控 ...

  3. 个人环境搭建——版本控制SVN

    版本控制SVN SVN服务器配置: 第一部分:svn服务器搭建(主要是四步走) 参考:http://www.son1c.cn/show/920.html 一,安装Subversion sudo apt ...

  4. 版本控制— SVN & git

    版本控制—— SVN & GIT 提问 什么是版本控制? 是能够一直监视代码文件的变更,并存储这些文件以便将来引用的一种机制(软件) 为什么要使用版本控制? (1)记录哪个开发人员做了变更 ( ...

  5. 版本控制-svn服务器搭建和常用命令(centos 6.3)

    Svn是比较优秀的版本控制工具,虽然功能和性能上无法和Git媲美,但由于其容易搭建和使用的特性,所以在各个小公司还是很受欢迎的.使用Git可参考<版本控制-Git服务器搭建和常用命令使用> ...

  6. 版本控制 - SVN/TortoiseSVN

    研读了blog: 1. http://www.open-open.com/lib/view/open1346982569725.html  2. http://www.360doc.com/conte ...

  7. lzugis—搭建属于自己的小型的版本控制SVN

    对于不了解SVN的同志们可以参考下"mh942408056"的这篇博文,SVN简介,链接地址为:http://blog.csdn.net/mh942408056/article/d ...

  8. 有关版本控制--SVN

    什么是版本控制? 这个之前有记录过相关的内容 版本管理就是管理更新的历史记录, 它给我们提供了一些在软件开发过程中必不可少的功能,例如: 记录一款软件添加或更改源代码的过程 回滚到特定阶段,恢复误删除 ...

  9. Unity使用外部版本控制SVN

    原地址:http://www.cnblogs.com/realtimepixels/p/3652146.html Using External Version Control Systems with ...

随机推荐

  1. 编写Java程序,通过给定可变参数方法,计算任意给定的多个int类型数据之和

    返回本章节 返回作业目录 需求说明: 通过给定可变参数方法,计算任意给定的多个int类型数据之和. 实现思路: 定义可变形参方法,参数类型是int类型. 定义变量 sum 接受最终的和. 通过 for ...

  2. Linux查找class类所在jar包

    1.说明 写代码或者定位问题的时候, 经常发生只知道类名不知道其所在jar包的问题, 在Eclipse中可以使用Ctrl+Shift+T查找类, 但是如果类所在的jar包不在Build Path中, ...

  3. centos一步一步搭建tendermint

    一.必要条件 1.安装go 请根据官方文档安装:https://golang.org/doc/install 要特别注意的是: /etc/profile 添加以下内容: export GOPATH=/ ...

  4. CAP 6.0 版本发布通告 - 支持 OpenTelemetry

    前言 今天,我们很高兴宣布 CAP 发布 6.0 版本正式版,在这个版本中,我们主要致力于对 OpenTelemetry 提供支持,以及更好的适配 .NET 6. 那么,接下来我们具体看一下吧. 总览 ...

  5. Jenkins_centos7安装jenkins(1)

    Jenkins自动化部署的流程 一.下载安装 下载安装JDK wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/j ...

  6. react将HTML字符串解析为HTML标签

    当后台返回的数据是字符串html的话,我们可以利用dangerouslySetInnerHTML属性来把字符串转换成html标签 function showhtml(htmlString){ var ...

  7. JSR-303规范

    规范链接 CONSTRAINT 详细信息 @Valid 被注释的元素是一个对象,需要检查此对象的所有字段值 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null ...

  8. Git 的配置 config

    Git 的配置 config Git 的配置 config config 文件简述 config 文件位置 信息查询 修改 config 文件 编辑配置文件 增加指定配置项 删除指定配置项 自助餐   ...

  9. 简述伪共享和缓存一致性MESI

    什么是伪共享 计算机系统中为了解决主内存与CPU运行速度的差距,在CPU与主内存之间添加了一级或者多级高速缓冲存储器(Cache),这个Cache一般是集成到CPU内部的,所以也叫 CPU Cache ...

  10. 《剑指offer》面试题20. 表示数值的字符串

    问题描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100"."5e2"."-123"."3.1 ...