版本控制—— SVN & GIT

提问

什么是版本控制?

是能够一直监视代码文件的变更,并存储这些文件以便将来引用的一种机制(软件)

为什么要使用版本控制?

(1)记录哪个开发人员做了变更
(2)变更发生的具体时间
(3)实际修订的内容
(4)如果需要,可以恢复特定文件或者整个项目到以前的版本
(5)……

不使用版本控制还会出现什么问题?

不使用版本控制可能出现的问题

1.备份多个版本,费空间,费时间
2.难于恢复至以前正确版本
3.容易引发BUG
4.解决代码冲突困难
5.代码管理混乱
6.难于追溯问题代码的修改人和修改时间
7.项目版本发布困难
8.……

版本控制(Revision Control)

是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统

现在就开始使用版本控制

如果是开发团队中的一员,使用版本控制是强制性的!

如果是单人开发,也强烈建议现在就开始使用版本控制

使用版本控制可以:

(1)不会对现有工作造成任何损害
(2)不会增加工作量
(3)添加新的功能拓展时,会变得更加容易

版本控制工具

1.CVS  开启版本控制之门
2.SVN  集中式版本控制之王者
3.GIT  分布式版本控制之伟大作品

SVN

1.SVN简介
2.SVN服务器端安装
3.SVN客户端软件
4.SVN与Xcode的集成

SVN基本交互流程图

SVN服务器安装

VisualSVN-Server

到公司,管理员建立用户名&密码,然后告知svn的地址

http: 80

https: 443

Subversion目录规范

1./trunk   存放开发的“主线”
2./branches   存放支线副本
3./tags   存放标签副本(版本标记1.0, 2.0)

SVN客户端软件

1.Cornerstone
2.Versions (注意:添加了Bookmark之后,需要重新启动一下Versions!)

有了Xcode,为什么还要使用客户端软件?

²因为Xcode对SVN的集成做的不够好,尤其在目录管理方面必须要小心谨慎!

SVN复习

服务器:代码仓库

协议头:

http: 80   不勾选

https: 443   勾选安全

服务器上选中服务器,点击右键,选择”properties(属性)”network(网络)

客户端:Versions

1. Repository Bookmark书签,代码仓库的标签

2. SVN的一个代码仓库中可以放多个项目

3. 用客户端最大的目的就是辅助检查是否有遗漏的情况

大部分工作在Xcode中都可以完成

Xcode工作:先更新,再提交!

Xcode中,最好不要多人同时修改一个Storyboard!

注意!!!

.svn这个隐藏目录记录着两项关键的信息

(1)工作文件的基准版本
(2)一个本地副本最后更新的时间戳

注意:千万不要手工修改或删除这个 .svn隐藏目录和里面的文件! 否则将会导致本地的工作副本被破坏,无法再进行操作

SVN与Xcode集成演练

1.利用多个客户端模拟多人协同工作
2.解决代码冲突
3.多人编译同一个Storyboard(谨慎)
4.新建分支并合并回主线

关于分支的细节:

(1)分支中开发的代码,要尽可能与主杆Trunk上的代码耦合度低!

使用SVN我们应该

1.经常更新:降低冲突的可能性
2.提交前需在本机测试通过:降低将问题代码传到版本库
3.提交时一定写备注:方便其他员工查看和自己以后回顾
4.对于不需要提交的文件不要提交到版本库

提示

1.每次提交之前先更新
2.每天下班前提交当天编译通过的代码
3.每天上班第一件事情更新前一天的代码

GIT

1.GIT简介
2.GIT工作模型及基本概念
3.GIT常用命令及演练
4.在Xcode中使用GIT
5.GIT经典协同模型/分支分类
6.GIT服务器的安装与配置

GIT简介

GIT是一款自由和开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目

是Linus(李纳斯)的第二个伟大作品,2005年由于BitKeeper软件公司对Linux社区停止了免费使用权。Linus迫不得己自己开发了一个分布式版本控制工具,从而Git诞生了

几乎所有优秀的iOS第三方框架都使用GIT

目前移动开发领域,越来越多的公司开始转向GIT

Xcode中已经集成了最常用的GIT功能

SVN vs GIT

SVN

集中式

效率略差

国内使用的较为广泛

由较好的图形化客户端和服务器支持,学习和使用相对简单

项目分支管理简单

GIT

分布式

效率高

国际上已经普遍使用,移动互联网项目开始越来越多地转向GIT

Xcode集成的功能已经能够满足大部分日常需求,但还有少量命令需要在终端输入,学习曲线相对陡峭

项目分支可以无限细分,更适合大型项目的版本规划

选择GIT的理由

1.分布式,离线操作
2.每日工作备份
3.异地协同工作
4.现场版本控制
5.避免引入辅助目录
6.可以吃后悔药
7.工作进度随时保存
8.快

GIT工作模型

1.集中式协同模型
2.社交网络式协同模型

集中式协同模型

社交网络式协同模型

GIT基本交互流程图

GIT仓库初始化

仓库初始化

git init --bare shared.git

仓库文件目录

HEAD:  指向当前分支的一个提交

description:  项目的描述信息

config:  项目的配置信息

info/:  里面有一个exclude文件,指定本项目要忽略的文件

objects/:  Git对象库(commit/tree/blob/tag)

refs/:  标识每个分支指向哪个提交

hooks/:  默认的hook脚本

GIT设置配置信息

命令

git config -l   查看配置信息

git config -e   编辑配置信息

默认修改.git/config文件

个人信省息初始化(不要随意修改)

git config user.name "user01"

git config user.email "user01@163.com"

提示:如果没有配置全局信息,每次克隆之后都必须配置用户名和邮件!

使用--global参数可以配置全局个人信息

忽略无需版本控制的文档

echo “*.txt” > .gitignore

GIT基本命令

工作区、暂存区和代码区

GIT命令行演练

1.创建代码仓库
2.多人协同工作
3.解决冲突
4.删除无需版本控制的文档

Xcode演练

1.创建代码仓库
2.多人协同工作
3.解决冲突
4.多人同时修改Storyboard
5.删除无需版本控制的文档

.gitignore中的内容

.DS_Store

*.xcworkspace

GIT经典协同模型

中心仓库:包含master和develop两个分支

分支分类

(1)主要分支:master和develop分支
(2)支持性分支:特性分支,发布分支,热补丁分支

提示:

(1)对于商业级项目,真正开发过程中都是基于develop分支进行的,develop分支是开发主线!
(2)master分支中,只存放相对稳定的分支,例如:0.1版本, 0.2版本
(3)在实际产品开发中,需要“规划版本”,例如:将100个功能规划到5个不同的版本上
(4)发现bug,要基于“上一个最稳定的版本”进行修复,这是热补丁分支存在的意义!
(5)理解清楚版本管理分支的特性,是迭代式开发的重要基础!

给分支打标签

git tag -a v1.0 -m 'Version 1.0'

打一个1.0的标签

git push origin v1.0

将标签推送到远程服务器

git tag

查看当前标签

git checkout v1.0

签出v1.0标签

git checkout -b v1.0hotfix

签出并创建v1.0hotfix分支

git branch

查看当前所在分支

安装GIT服务器

GIT代码仓库本质上是通过命令行来操作的

如果在局域网中配置GIT服务器,只要能够通过终端访问到服务器即可

在Windows上要安装GIT服务器,安装如下三个软件即可

(1)CopSSH  允许windows使用ssh访问unix服务器目录

注意:CopSSH的用户一定不能是windows的管理员!!!

(2)GIT-Windows  在Windows中运行的GIT,其本质就是命令行
(3)Tortoisegit  Windows中GIT的图形化操作客户端

在Mac上要安装GIT服务器,无需安装任何软件,只需要设置访问用户即可,远程用于通过授权的账户名和密码登录,即可使用GIT

提示:GIT服务器可以是互联网中的某台主机,也可以是局域网中的某台计算机的共享目录,还可以是U盘。总之:分布无所不在!

CopSSH

将Git\libexec\git-core下的git.exe
, git-receive-pack.exe, git-upload-archive.exe, git-upload-pack.exe拷贝到\ICW\bin下

将\Git\bin\libiconv-2.dll拷贝到ICW\bin下

CopSSH本质上就是允许其他计算机以SSH的方式访问计算机资源

SSH是目前较可靠的,专为远程登录会话和其他网络服务提供安全性的协议

使用GIT我们应该

1.经常更新:降低冲突的可能性
2.提交前需在本机测试通过:降低将问题代码传到版本库
3.提交时一定写备注:方便其他员工查看和自己以后回顾
4.对于不需要提交的文件不要提交到版本库

提示

1.每次提交之前先更新
2.每天下班前提交当天编译通过的代码
3.每天上班第一件事情更新前一天的代码

Q & A

如果你现在是开发团队中的一员,还是单人开发,都强烈建议现在就开始使用版本控制!

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

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

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

  2. 版本控制比较cvs,svn,git

    版本控制比较cvs,svn,git 几个重要概念: 版本库模型(Repository model):描述了多个源码版本库副本间的关系,有客户端/服务器和分布式两种模式.在客户端/服务器模式下,每一用户 ...

  3. SVN/GIT源代码泄露

    造成SVN源代码漏洞的主要原因是管理员操作不规范.在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息.但一些网站管理员在发布代码时,不愿意使用‘导出’功能 ...

  4. Git版本控制:Git查阅、撤销文件修改和撤销文件追踪

    http://blog.csdn.net/pipisorry/article/details/47867097 查看文件的修改历史 git log --pretty=oneline 文件名 # 显示修 ...

  5. 版本控制工具——Git常用操作(上)

    本文由云+社区发表 作者:工程师小熊 摘要:用了很久的Git和svn,由于总是眼高手低,没能静下心来写这些程序员日常开发最常用的知识点.现在准备开一个专题,专门来总结一下版本控制工具,让我们从git开 ...

  6. 痞子衡嵌入式:备受开源社区推崇的分布式版本控制工具(Git)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是分布式版本控制工具Git. 1.为什么需要版本控制系统? 单人软件项目开发过程,往往很多功能都是逐步增加的,在代码开发过程中,有的时候功 ...

  7. 版本控制工具Git工具快速入门-Linux篇

    版本控制工具Git工具快速入门-Linux篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.版本管理系统的介绍 1>.版本管理系统的特点 1.1>.自动生成备份: ...

  8. 版本控制工具Git工具快速入门-Windows篇

    版本控制工具Git工具快速入门-Windows篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近在学习Golang语言,之前的开发环境在linux上开发的,后来由于办公用的是w ...

  9. VSS SVN GIT SVN 加锁签出

    VSS TFS SVN GIT VSS 两大功能: 1.签出后加锁,别人不能签出,独占签出. 2.在服务端可以查看哪些用户签出了哪些文件. 3.查看所有签出未签入的文件列表,SVN未发现此功能. 缺点 ...

随机推荐

  1. RGB颜色转换为多种颜色工具、公式

    http://www.easyrgb.com/index.php?X=CALC#Result http://www.easyrgb.com/index.php?X=MATH  

  2. 【例题 7-8 UVA - 10603】Fill

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 三维显然可以缩短为2维. 只要知道a,b瓶中的水量,c瓶中的水量减一下就能得到. 则设dis[a][b]表示a,b瓶中水量为a,b时 ...

  3. 51Nod——N1082 与7无关的数

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1082 题目来源: 有道难题 基准时间限制:1 秒 空间限制:13107 ...

  4. Android开发之搜芽项目的图片载入问题(使用Volley进行网络图片载入)

    搜芽的移动开发这几天进度相对来说很的快. 可是美中不足的就是网络图片的载入问题. 我有两套方案: 1)沿用迅雷动漫的图片载入.迅雷动漫也是用的一个开源的库.可是不知道是我使用出了问题还是真的是它的问题 ...

  5. AMBA标准

    AMBA标准定义了三种不同的总线 高级高性能总线(AHB): 高级系统总线(ASB):-----用的比较少 高级外设总线(APB). 基于AMBA的典型微控制器: 典型的AMBA AHB系统设计包含以 ...

  6. chrome-extensions -- copytables. verygood

    https://www.crx4chrome.com/extensions/ekdpkppgmlalfkphpibadldikjimijon/,通过设置快捷键,一般是拷贝多行

  7. 数据类型总结——Number(数值类型)

    相关文章 简书原文:https://www.jianshu.com/p/9fb573ef10da 数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015. ...

  8. 初步安装git使用命令配置电脑中的git关联的账户

    原文地址 https://www.jianshu.com/p/39684a3ad4fa 出现问题 当我们初步使用git的时候,会报一些出乎预料的错误,比如:报错:fatal: unable to au ...

  9. java连接MongoDB查询导出为excel表格

    背景 因为项目需求.每一个星期须要统计每一个公众号7天的訪问数,月底就须要统计一个月的訪问数,40多个公众号.每次手动统计都须要花费1个小时,总之是一项无技术耗时耗神的手工活. 于是.想写个程序来统计 ...

  10. c# 读/写文件(各种格式)

    最简单的: --------写 //content是要写入文本的字符串 //(@txtPath + @"\" + rid + ".txt");要被写入的TXT ...