为什么需要版本控制?

  • 场景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. OWIN 中 K Commands(OwinHost.exe)与 Microsoft.AspNet.Hosting 的角色问题

    问题详情:K Commands(OwinHost.exe)是不是 OWIN 中的 Host 角色?如果是,那 Microsoft.AspNet.Hosting 对应的是 OWIN 中的哪个角色? OW ...

  2. PopupWindow 点击外部和返回键无法消失背后的真相(setBackgroundDrawable(Drawable background))

    刚接手PopupWindow的时候,我们都可能觉得很简单,因为它确实很简单,不过运气不好的可能就会踩到一个坑: 点击PopupWindow最外层布局以及点击返回键PopupWindow不会消失 新手在 ...

  3. “全能”选手—Django 1.10文档中文版Part3

    Django 1.10官方文档的入门教程已经翻译完毕,后续的部分将不会按照顺序进行翻译,而是挑重点的先翻译. 有兴趣的可以关注我的博客. 第一部分传送门 第二部分传送门 第四部分传送门 3.2 模型和 ...

  4. 浅析String不可变性

    在所有编程语言领域,我想字符串应该是地球上最常用的表达手段了吧. 在java的世界里,String是作为类出现的,核心的一个域就是一个char数组,内部就是通过维护一个不可变的char数组,来向外部输 ...

  5. Net设计模式实例之适配器模式(Adapter Pattern)

    一.适配器模式简介(Brief Introduction) 适配器模式,将一个类装换成客户期望的另外一个接口.Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作. 二.解决的问题( ...

  6. 从View向Controller传递复杂类型Json

    mvc给我们提供多种controller中读取view数据的方法 1.从Ruquest["name"]中直接读取 2.将表单中name名称直接写在Action的参数列表中 3.将表 ...

  7. iOS学习笔记——使用ChildViewController

    之前在使用TableView的时候遇到过问题,需要使用另外的TableViewController来先存放TableView,原有的View则使用ViewContainer来引用TableViewCo ...

  8. sqlHelper做增删改查,SQL注入处理,存储值,cookie,session

    一.存储值 eg:登录一个页面,在进入这个页面之前你怎么知道它登没登录呢?[在登录成功之后我们把状态保存起来] 存储值得方式有两种,一种是cookie,一种是session 1.1区别: 代码: if ...

  9. 关于C#操作防火墙,阻止程序联网

    //开启服务.开启防火墙 public void OpenFileWall() { // 1. 判断当前系统为XP或Win7 RegistryKey rk = Registry.LocalMachin ...

  10. php语言实现的7种基本的排序方法

    今天总结了一下常用的7种排序方法,并用php语言实现. 直接插入排序 /* * 直接插入排序,插入排序的思想是:当前插入位置之前的元素有序, * 若插入当前位置的元素比有序元素最后一个元素大,则什么也 ...