iOS开发- 版本控制SVN和Git使用详解

公司的实际开发中,在天朝使用较多的还是SVN,因为SVN是集中式的,在天朝上班你们都懂的!

-----------------svn-----------------

一:最常用基本步骤---

  • 下载(完整下载,第一次),将服务器的项目下载到本地开始开发

svn checkout ip —uaerbane=? —password=?     //这里需要add

简:co

  • 更新仓库,服务器项目有变动的时候需要更新到本地,以免错误或者冲突

svn updata               //这里的直接commit就可以了

简:up

  • 写代码。。。。。。。。。。。。。
  • 查看状态

svn  status

简:st

  • 添加到仓库

svn add name

  • 提交项目

svn commit -m “注释"

简:ci

  • 版本回退:错误操作,需求更改,查看历史

svn updata r版本号   //查看回退版本

正式:

    1. svn update
    2. svn merge      -r  版本号(现):版本号(前) name
    3. svn ci -m “注释"
  • 移除文件

svn remove name

简:rm

  • 查看版本号
    1. svn updata      //先更新所有数据
    2. svn log            //打印所有版本

二:冲突解决--------

out of data——

  • —>updata
  • —>commit

(手动解决冲突:postpone):

svn resolved name

有效的避免冲突:

  • 先updata->子啊修改文件
  • 或者修改文件之前和同事打招呼

补充:

当座位一个新?人加?入(李四进?入公司)

1.需要做的事情

    • 和项??目经理要svn的服务器地址/svn账号和密码 需求?文档 : 当前的需求
    • 接?口?文档 : 接?口?文档记录详细的服务器所有的接?口 效果图 : 界?面到底做成什么样?子

2.将服务器完整的代码下载到本地

  • svn checkout 服务器地址 ?用户名和密码

3.代码冲突

    • out of date : 过期
    • df : 在命令?行中给展?示所有的不同的地?方
    • e : 在命令?行编辑冲突
    • s : 展?示可解决冲突的选项
    • mc : 使?用我的代码,来覆盖服务器代码
    • tc : 使?用服务器的代码,来覆盖我的代码
    • p : 对?比所有的版本变化,?手动解决冲突—>svn resolved person.h

注意:

1>在修改公共?文件之前,最好先update,然后再修改 2>在修改公共?文件之前,可以和同事说?一声,先不要修改?文件,修改完之后让同事更 新

三:图形化界面(UI):Cornerstone/Version

这里简单介绍CornerStone的使用及注意点

--主界面--

实用Cornerstone需要注意的几个地方:

    • 1.查看日志

找到“Log”选项,选择并点击。
查看自己当前的版本是否是最新的,如果不是最新的版本,从第2步开始执行;
如果自己当前的版本是最新的,从第3步开始执行;

    • 2.更新到最新版本

当前程序员在打开工程项目之前,找到“Update to Latest Revision”选项,选择并点击。
目的:保持当前程序员客户端的项目版本是最新的。

    • 3.编辑项目
    • 4.提交之前,再次点击“Update to Latest Revision”,保持项目是最新版本。
    • 5.更新最新版本后,如果有错误,冲突等情况,解决,直到没错误!
    • 6.提交项目,找到“Commit Changes”选项,选择并点击。

目的:把当前编辑后的项目提交的服务器。

    • 7."lock"和“unlock”的使用

当我们正在编辑某个文件时,为了防止被其他人修改,可以在编辑之前,使该文件处于锁定状态,当我们编辑后,要提交的时候,再解锁。

    • 8.提交项目,都要写详细备注并署名。
    • 9.恢复到以前的版本,以前其他出错情况,请参考稍后的文档说明或上网搜索。

最后总结一下使用步骤

1.项??目经理初始化项??目 1>项??目经理将服务器已有的内容下载到本地

  • 记住选择正确的svn版本号—>1.7 2>项??目经理创建项??目到code?文件夹 3>项??目经理忽略掉?一些不需要的?文件
  • Xcode会帮我们记录当前正在编辑的?文件,下次打开时停留在该?文件
  • Xcode会帮我们记录??目录打开情况,同事不需要共享 断点信息同事不需要共享,所有也需要忽略 xcuserdata

2.使?用Xcode的svn注意点 1>当项??目中如果使?用到了静态库,必须使?用命令?行将静态库添加到svn管理之下 2>项??目中如果使?用storyboard,svn的管理也需要特别注意

  • 如果可以使?用xib那么尽量使?用xib 保证同时只有?一个?人在修改storyboard

3.公司使?用svn技巧 尽可能修改?文件之前要update,写?一些代码之后就?立即提交到服务器 如果今天写了很多代码,建议在下班前半个?小时就提交.

cornerStone中三个基本目录的含义:tags,branch,truck

  • truck主分支,是用来做主方向开发的,一个新模块的开发,这个时候就放在trunk,当模块开发完成后,需要修改,就用branch。
  • branch:是用来做并行开发的,这里的并行是指和trunk进行比较。
  • tag:是用来做一个milestone的,不管是不是发布版本,但都是一个可用的版本。这里,应该是只读的。更多的是一个显示用的,给人一个可读的标记。咱们ITOO1.0阶段开发完毕,就可以打一个tag,然后进入2.0的开发。tags的作用是将在branches上修改的bug的代码合并到trunk上时创建个版本标识,以后branches上修改的bug代码再合并到trunk上时就从tags的version到branches最新的version合并到trunk,以保证前期修改的bug代码不会再合并。

假设个例子,ITOO1.0开发完成,这个时候要做一个tag,tag_release_1_0,然后基于这个tag做发布,比如安装程序等。trunk进入 1.1的开发,但是1.0发现了bug,那么就需要基于tag_release_1_0做一个分支(branch),branch_bugfix_1_0,基于这 个branch进行bug修改,等到bugfix结束,做一个tag,tag_release_1_0_1,然后,根据需要决定 branch_bugfix_1_0是否并入主干(trunk)。

对于svn还要注意的一点,就是它是全局版本号,其实这个就是一个tag的标记,所以我们经常可以看到,什么什么release,基于xxx项目的 2xxxx版本。就是这个意思了。但是,它还明确的给出一个tag的概念,就是因为这个更加的可读,毕竟记住tag_release_1_0要比记住一个 很大的版本号容易的多。

SVN真的是一个很强大的工具,他很好的管理了我们的团队合作。

-----------------git-----------------

git中需要注意的几个命令(名称)

  • push:提交到服务器
  • pull:更新
  • clone:完整下载
  • commit:本地提交

一.命令?行的演练

1.初始化?一个代码仓库

  • git init

2.如果使?用git必须给git配置?一个?用户名和邮箱 给当前的git仓库配置?一个?用户名和邮箱

  • git config user.name “why”
  • git config user.email “why@163.com”

配置?一个全局的?用户名和邮箱

  • git config —global user.name “why”
  • git config —global user.email “why@163.com” 3.初始化项??目
  1. touch main.m : 创建了main.m
  2. git add main.m : 将新添加的?文件或者修改的?文件添加到暂存区
  3. git commit -m “初始化项??目”
  4. git add . : 将所有没有被添加到暂存区或者代码仓库的?文件添加到暂存区

注意:?无论是新添加的?文件或者修改的?文件,都需要先通过add命令添加到暂存区中, 之后再通过commit命令添加到本地仓库中

4.查看?文件的状态 git status

  • 红?色 : 新创建的?文件或者被修改的?文件,没有被添加到暂存区
  • 绿?色 : 表?示?文件在暂存区,但是没有被添加到本地仓库中 5.给命令起别名
    • git config alias.st “status”
    • git config alias.ci “commit -m”
    • git config —global alias.st “status”

6.git删除?文件 git rm ?文件名

7.查看版本号 git log

  • git reflog
  • git config --global alias.lg "log --color --graph -- pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset‘ --abbrev-commit” git lg

8.git的版本号是由sha1算法?生成40位的哈希值 9.版本回退

  • git reset —hard HEAD : 回退到当前的版本
  • git reset —hard HEAD^ : 回退到上?一个版本 git reset —hard HEAD^^ : 回退到上上个版本 git reset —hard HEAD~100 : 回退到前100版本 git reset -hard 版本号(前5位)

二.团队开发—共享版本库

  1. 真实的GIT服务器的搭建,是?非常繁琐的事情(Linux)
  2. 一个?文件夹
  3. 优盘
  4. 将代码托管到别?人的服务器(Github/OSChina)

1.?文件夹作为共享版本库 git init —bare

2.项??目经理将共享版本库的内容先下载下来 git clone 地址

3.添加需要忽略的?文件

  • touch .gitignore 去github上搜索.gitignore->Objective-C git add .gitignore
  • git commit -m “添加了需要忽略的?文件”

4.项??目经理初始化项??目

  • git commit -m “初始化项??目”—>提交到本地代码仓库

5.将项??目push远程仓库中 git push origin

6.当源代码管理是使?用GIT,并且在Xcode进?行多?人开发的操作 注意:当使?用GIT,项??目中?用到了静态库就不需要通过命令?行进?行添加

三.版本备份(了解) 1.1.0版本开发完成,之后对1.0版本进?行备份

  • git tag -a weibo1.0 -m “这个是1.0版本” : 给某?一个版本打上标签
  • git tag : 查看所有的标签 2.需要将1.0版本的标签,push到服务器
  • git push origin weibo1.0

3.继续开发2.0版本
4.发现1.0版本有bug,从标签?里?面clone 1.0版本,从标签创建?一个fixbug分?支,在分 ?支中修复bug

  • git clone 共享版本库
  • git checkout weibo1.0(标签的名称)
  • git checkout -b weibo1.1fixbug(分?支名称)

5.修复后的版本上传AppStore/将1.0fixbug进?行备份/将1.0fixbug版本和2.0版本 进?行合并\

  • git tag -a weibo1.1 -m “这个是修复了1.0版本bug的1.1版本”
  • git tag
  • git push origin weibo1.1 将?子分?支中代码合并到主分?支,pull—>weibo1.1fixbug—>push master—>其 它同事更新

6.删除分?支

  • git branch -r
  • git branch -r -d 分?支名称

四.将代码托管到别?人的服务器?里?面 1.Github

创建Github上的仓库

  • 1) HTTPS : http + SSL
  • 2) SSH : 公钥和私钥—>settings—>SSH Keys—>?生成公钥和私钥 删除代码仓库 可以给别?人的代码提?比较功能/对别?人的代码重构:fork—>pull Request issues : 给框架作者提问题
  • 2.OSChina(Github上?面项??目不能私有化:交钱可以) 创建代码仓库

HTTPS/SSH
.gitignore不够完整 : ?手动添加完成 如果项??目想要多?人开发:管理—>成员管理—>添加成员:让新?人注册?一个 OSChina

图形化界面(UI):Cornerstone/Version

这里只大致介绍sourceTree,毕竟在中国Git使用并不常见

SourceTree

作为一个懒人 Git的命令行我是不太爱的 所以GUI的工具就成了我的首选
Mac下的Git工具真是五花八门 著名的有Tower SmartGit等等(更多可以看下这里的介绍)

今天我们介绍的是SourceTree 出品方为Atlassian 旗下的产品还有著名的track工具JIRA Github的竞争者Bitbucket等等(这两个我也是经常用的 尤其是BitBucket 支持免费私有仓哦~)

SourceTree的特点如下

  • 免费
    SourceTree是免费使用的 只要简单的注册一下就好了
  • 跨平台
    Windows和Mac都可以用
  • 完美支持Github和Bitbucket
    我所有Github和Bitbucket上的项目都是用它来管理的 当然 公司的项目也是用SourceTree管理 无不干扰
  • 支持Git Flow
    Git Flow(翻译版)是一套关于Git的使用实践 现在已得到广泛的认可和推广 如果使用得当 开发管理的过程将变得更轻松和清晰

这是SourceTree的Repo列表界面 也是打开时的默认界面 这里可以对所有的Repo进行统一的管理 也支持分组这是SourceTree的Repo详情界面 这里是单独对某个Repo操作的地方 Git的所有操作你都可以在GUI上进行 非常的方便顺手

具体细节就请自己使用之后慢慢体会吧 这里就不多介绍了

-----------------Xcode-----------------

上面的SVN和Git其实都可以在Xcode中直接使用,如果你只是简单的实现提交和更新服务器仓库里面的代码,使用Xcode基本上就可以实现了,但是有的时候可能Xcode不能满足我们的要求或者相对比较麻烦,所以我们一般情况都不会立刻就选择Xcode的,除非项目很简单

下面是Xcode一些常用的版本控制操作简单列举:

选择对应的选项实现:

提交代码到服务器代码仓库(注释)

如果你看到了这里,或许你对版本控制已经基本上了解,但或许你也感觉有点蒙,但是没关系,上面这么多,实际开发中用到的十分之一不到,所以笔者为你准备了一片简单的实战:

时间: 2024-08-02 11:00:48

iOS开发- 版本控制SVN和Git使用详解的相关文章

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

版本控制SVN和Git使用详解 公司的实际开发中,在天朝使用较多的还是SVN,因为SVN是集中式的,在天朝上班你们都懂的! -----------------svn----------------- 一:最常用基本步骤--- 下载(完整下载,第一次),将服务器的项目下载到本地开始开发 svn checkout ip —uaerbane=? —password=?     //这里需要add 简:co 更新仓库,服务器项目有变动的时候需要更新到本地,以免错误或者冲突 svn updata    

iOS开发——网络编程Swift篇&amp;Alamofire详解

Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AFNetworking非常稳定,在Mac OSX与iOS中也能像其他Objective-C代码一样用Swift编写.不过Alamofire更适合Swift语言风格习惯(Alamofire与AFNetworking可以共存一个项目中,互不影响). Alamofire 取名来源于Alamo Fire fl

iOS开发——实用篇&amp;KVO与KVC详解

KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Valu

iOS开发——代码生成TabBar与视图切换详解

我在之前多篇博客中讲解了在不使用storyboard而使用nib文件的情况下,使用代码生成导航栏并进行跳转,具体可以参考<iOS开发--界面跳转与返回及视图类型详解><iOS纯代码实现界面建立.跳转.导航栏(无storyboard.无nib)(Objective-C)>.今天我来讲解下在使用nib搭建界面的情况下,用代码生成TabBar,并进行界面之间的跳转.代码示例已经上传至:https://github.com/chenyufeng1991/TabBarTest   . (1)

iOS开发中的UDID和UUID详解

今天突然想和大家聊聊UDID和UUID的问题,虽然平时我们对这两个东西很忽视,往往也很难区分这两个东西.今天就来好好谈谈. [UDID] UDID的全名为 Unique Device Identifier :设备唯一标识符.从名称上也可以看出,UDID这个东西是和设备有关的,而且是只和设备有关的,有点类似于MAC地址.我在上一篇博客中<iOS应用发布流程详解>提到了真机调试,然后需要把UDID这个东西添加到Provisoning Profile授权文件中,也就是把设备唯一标识符添加进去,以此来

iOS开发——控制器OC篇&amp;UINavigationController&amp;UITabBarController详解

UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationController以栈的形式保存子控制器 @property(nonatomic,copy) NSArray *viewControllers; @property(nonatomic,readonly) NSArray *childViewControllers; 导航控制器之间的跳转: 使用push方法能将某个控制

iOS开发——UI篇OC篇&amp;SpriteKit详解

SpriteKit详解 SpriteKit,iOS/Mac游戏制作的新纪元 这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览.本文仅作为个人记录使用,也欢迎在许可协议范围内转载或使用,但是还烦请保留原文链接,谢谢您的理解合作.如果您觉得本站对您能有帮助,您可以使用RSS或邮件方式订阅本站,这样您将能在第一时间获取本站信息. 本文涉及到的WWDC2013 Session有 Session 502 Introduction to Sprite Kit Session 503 D

iOS开发——UI篇OC篇&amp;UICollectionView详解+实例

UICollectionView详解+实例 实现步骤: 一.新建两个类 1.继承自UIScrollView的子类,比如HMWaterflowView * 瀑布流显示控件,用来显示所有的瀑布流数据 2.继承自UIView的子类,比如HMWaterflowViewCell * 代表着瀑布流数据中的一个单元(一个格子) 3.总结 HMWaterflowView和HMWaterflowViewCell的关系实际上类似于 UITableView和UITableViewCell的关系 二.设计HMWater

iOS开发——UI篇OC篇&amp;UIStackView详解

UIStackView详解 一.继承关系.遵守协议.隶属框架及可用平台 UIStackView 类提供了一个高效的接口用于平铺一行或一列的视图组合.Stack视图使你依靠自动布局的能力,创建用户接口使得可以动态的调整设备朝向.屏幕尺寸及任何可用范围内的变化.Stack视图管理着所有在它的 arrangedSubviews 属性中的视图的布局.这些视图根据它们在 arrangedSubviews 数组中的顺序沿着 Stack 视图的轴向排列.精确的布局变量根据 Stack 视图的 axis , d