为什么需要版本控制?

  • 场景1:

    • 你的代码正常工作
    • 你改了其中的几行代码
    • 程序出了问题
    • 你把代码改回来
    • 程序还是不能正常工作——为什么?
  • 场景2:

    • 你的程序昨天还能正常运行
    • 昨天晚上你修改了很多内容,做了很大的改进
    • 但是目前程序还不能正常运行
    • 客户今天要看你程序演示的demo
  • 场景3:
    • 第一天客户要求你写一个进度条对话框来显示进度
    • 第二天客户觉得对话框不好看,用进度条显示进度
    • 第三天客户又觉得还是对话框好看,重新用对话框
  • 场景4:
    • 有人在代码里面做了手脚,找出来这个人
    • 程序员不承认这是自己写的代码
  • 场景5:

    • 代码拥有者权限
  • 场景6:

    • 你改了代码的一部分,程序可以正常工作
    • 你同事改了代码的一部分,程序也可以正常工作
    • 你把你们的改动合并在一起,程序不正常工作了
    • 到底是代码那些地方发生了变化?
    • 什么变化让代码不能正常工作了?
    • 我如何跟同事一起协同的开发项目?
  • 场景7:

    • 项目管理,工作量统计

常见版本控制软件

  1.CVS :基本被SVN取代。CVS是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件subversion。多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。但是由于之前CVS编码的问题,现在大多数软件开发公司都使用SVN替代了CVS。
  2.SVN :目前使用最常用的主流版本控制软件。
  3.ClearCase :比较大型的版本控制软件。
  4.VSS :Windows平台开发最常用的。
  5.GIT:公司做项目的话用的不是很多。用于 Linux内核开发的版本控制工具,比如Android的源码就是用GIT做版本控制的。

SVN

svn简介:

  Svn(Subversion)是近年来崛起的版本管理工具,在当前的开源项目里(J2EE),几乎95%以上的项目都用到了 SVN。Subversion 项目的初衷是为了替换当年开源社区最为流行的版本控制软件CVS,在CVS的功能的基础上有很多的提升同时也能较好的解决CVS系统的一些不足。

什么是SVN服务器:

  SVN分为服务器端和客户端。服务器端运行在某一台服务器或者电脑上。服务器端通过配置文件管理用户名 密码 的配置,以及他们对软件项目目录的访问权限配置。
客户端一般集成在 软件开发人员的开发工具上,如eclipse
还可以使用 类似于
TortoiseSVN 的客户端软件访问 SVN 服务器,提交代码,合并代码等操作。

SVN服务器端安装

  VisualSVN是一款图形化svn服务器。官网

http://www.visualsvn.com/server/

  下载地址:

http://www.visualsvn.com/server/download/

  搭建svn服务器,安装步骤见我的另外一篇博文:如何搭建SVN服务器,详细安装步骤。

TortoiseSvn客户端

  TortoiseSVN 是svn版本控制系统的一个免费开源客户端,它是svn版本控制的 Windows 扩展。可以使你避免使用枯燥而且不方便的命令行。它完全嵌入 Windows Explorer,使用时只需在正常的窗口里点击右键操作就可以了。

下载安装地址

http://tortoisesvn.net/downloads

TortoiseSvn的安装,见我的另外一篇博文:TortoiseSvn的安装过程详解

SVN插件:subclipse

  eclipse上可以通过安装svn插件的方式实现代码的管理,eclipse中最常使用的SVN插件是subclipse。

  subclipse官网:

  http://subclipse.tigris.org

  SVN安装教程见,Mac下eclipse安装SVN插件

SVN最佳实战

  1.单用户版本控制
  2.版本库的备份和还原
  3.多用户权限控制
  4.多用户版本控制
  5.多用户冲突合并

  7.采用svn管理android项目

  8.常见ignore文件类型

SVN图标详解(TortoiseSVN图标介绍:)

l一个新检出的工作复本使用如下绿色的对勾重载。表示Subversion状态正常。

l在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次更新工作复本后被修改过,需要被提交。

l如果在提交的过程中出现了冲突,图标变成黄色感叹号。

l如果你给一个文件设置了svn:needs-lock属性,Subversion会让此文件只读,直到你获得文件锁。只读文件具有这个重载图标来表示你必须在编辑之前先得到一个锁。

l如果你拥有了一个文件的锁,并且Subversion状态是正常,这个重载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对该文件的修改。

l这个图标表示当前文件夹下的某些文件或文件夹已经被计划从版本控制中删除,或是该文件夹下某个受控的文件丢失了。容易引起误解,新版本客户端不常见了。

l加号告诉你有一个文件或是目录已经被计划加入版本控制。
 

Eclipse 中SVN插件资源同步符号说明

  1.灰色向右箭头:本地修改过
  2.蓝色向左箭头:SVN上修改过
  3.灰色向右且中间有个加号的箭头:本地比SVN上多出的文件
  4.蓝色向左且中间有个加号的箭头:SVN上比本地多出的文件
  5.灰色向右且中间有个减号的箭头:本地删除了,而SVN上未删除的文件
  6.蓝色向左且中间有个减号的箭头:SVN上删除了,而本地未删除的文件
  7.红色双向箭头:SVN上修改过,本地也修改过的文件

Git

Git简介

 

  Git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。Git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。

Windows下Git的安装

  1.msysgit是Windows版的Git,提供了命令行操作

  下载地址:http://msysgit.github.io/

  Git的安装,见我的另外一篇博文:Git安装图解

  2.TortoiseGIT 是Git版本控制系统的一个免费开源客户端,它是git版本控制的 Windows 扩展。可以使你避免使用枯燥而且不方便的命令行。它完全嵌入 Windows Explorer,使用时只需在正常的窗口里点击右键操作就可以了。

  下载地址:

  https://code.google.com/p/tortoisegit/

  TortoseGit的安装,见我的另外一篇博文 TortoiseGIT的安装过程详解

Git的优势

  分布式,强调个体
  公共服务器压力和数据量都不会太大
  速度快、灵活
  任意两个开发者之间可以很容易的解决冲突
  离线工作

Git基本交互流程图

开源项目工作流程图

Git最佳实战

  单用户本地Git仓库创建和使用
  多用户远程Git仓库创建和使用
  Git补丁patch的创建

Github的使用

开源项目获取的方法

  http://www.github.com   git

  http://code.google.com  svn

Android应用开发基础之十二:版本控制的更多相关文章

  1. Android学习之基础知识十二 — 第一讲:网络技术的使用

    这一节主要讲如何在手机端使用HTTP协议和服务器端进行网络交互,并对服务器返回的数据进行解析,这也是Android中最常用的网络技术. 一.WebView的用法 有时候我们可能会碰到比较特殊的需求,比 ...

  2. Android UI开发第四十二篇——实现实现易信的圆形图像和对话列表的图像显示部分

    显示图像时,很多个性化显示,圆形或圆角.气泡等等,我们这一篇文章探讨一下圆形和气泡的显示,仿照易信中的实现,先看下效果图: 代码: public class RoundImageView extend ...

  3. Android UI开发第三十二篇——Creating a Navigation Drawer

    Navigation Drawer是从屏幕的左侧滑出,显示应用导航的视图.官方是这样定义的: The navigation drawer is a panel that displays the ap ...

  4. Android应用开发基础之十:多媒体编程

    多媒体概念 文字.图片.音频.视频 计算机图片大小的计算 图片大小 = 图片的总像素 * 每个像素占用的大小 单色图:每个像素占用1/8个字节 16色图:每个像素占用1/2个字节 256色图:每个像素 ...

  5. Android商城开发系列(十二)—— 首页推荐布局实现

    首页新品推荐的布局效果如下图: 这块布局是使用LinearLayout和GridView去实现,新建recommend_item.xml,代码如下所示: <?xml version=" ...

  6. Android学习之基础知识十二 — 第二讲:网络编程的最佳实践

    上一讲已经掌握了HttpURLConnection和OkHttp的用法,知道如何发起HTTP请求,以及解析服务器返回的数据,但是也许你还没发现,之前我们的写法其实是很有问题的,因为一个应用程序很可能会 ...

  7. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  8. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  9. Android应用开发基础篇(1)-----Button

    Android应用开发基础篇(1)-----Button   一.概述        Button,顾名思义就是按钮的意思,它主要的功能是响应用户按下按钮时的动作. 二.应用      新建一个工程, ...

随机推荐

  1. iOS开发之调用系统打电话发短信接口以及程序内发短信

    在本篇博客开头呢,先说一下写本篇的博客的原因吧.目前在做一个小项目,要用到在本应用程序内发验证码给其他用户,怎么在应用内发送短信的具体细节想不大起来了,于是就百度了一下,发现也有关于这方面的博客,点进 ...

  2. gravatar配置和使用【让你的网站使用全球通用头像】

    前言 我们在很多博客或者网站留言,评论的时候会看到有的人头像很酷很个性化,但是这个博客和网站本身并没有提供设置头像的功能,感觉有点神奇,那么是怎么做到的呢?其实这是使用了Gravatar. Grava ...

  3. Cesium原理篇:3最长的一帧之地形(3:STK)

    有了之前高度图的基础,再介绍STK的地形相对轻松一些.STK的地形是TIN三角网的,基于特征值,坦白说,相比STK而言,高度图属于淘汰技术,但高度图对数据的要求相对简单,而且支持实时构建网格,STK具 ...

  4. DotNet处理服务器路径的方法

    项目中需要使用到路径处理的地方比较多,对于路径的解析和匹配有时较为繁琐,现在提供一个对路径进行解析的方法: 1.验证设置路径字符串: /// <summary> /// 验证设置路径字符串 ...

  5. C# 利用socekt做到http监听,怎么样才能做到高性能

    c#原始提供了http的监听的类HttpListener,实现了简单的http.文章地址<C# 控制台或者winform程序开启http的监听状态> 但是经过我测试,这个HttpListe ...

  6. 基于sticky组件,实现带sticky效果的tab导航和滚动导航

    上文提供了一个改进版的sticky组件,并将演示效果应用到了自己的博客.有了类似sticky的这种简单组件,我们就可以在利用它开发更丰富的效果,比如本文要介绍的tab导航和滚动导航.实现简单,演示效果 ...

  7. Microsoft Visual Studio 2008 未能正确加载包“Visual Web Developer HTML Source Editor Package” | “Visual Studio HTM Editor Package”

    在安装Microsoft Visual Studio 2008 后,如果Visual Studio 2008的语言版本与系统不一致时,比如:在Windows 7 English System 安装Vi ...

  8. ASP.NET Core 介绍和项目解读

    标签: ASP.NETCore 1. 前言 2. ASP.NET Core 简介 2.1 什么是ASP.NET Core 2.2 ASP.NET Core的特点 2.3 ASP.NET Core 项目 ...

  9. order by用法

    此文来源于CSDN中zxcvg的博文 1.ORDER BY 中关于NULL的处理 缺省处理,Oracle在Order by 时认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最 ...

  10. EC笔记,第二部分:6.若不想使用编译器默认生成的函数,就该明确拒绝

    6.若不想使用编译器默认生成的函数,就该明确拒绝 1.有的时候不希望对象被复制和赋值,那么就把复制构造函数与赋值运算符放在private:中,但是这两个函数是否需要实现呢?假设实现了,那么你的类成员方 ...