iOS协同开发 – git的使用三 - 常规使用 checkout、commit、pull、push、merge

常规使用流程

  1. 加入项目组后,获得项目的git仓地址后
  2. 使用checkout进行检出,选择自己的branch(分支)或者检出master分支后new branch(创建新分支)并切换到自己的分支
  3. 然后编写代码,当日工作完成后进行commit(预提交),同时需要注释本次提交的简介(mark)。
  4. 如果本分支有两人以上同时开发,在push(提交到远程git仓)之前需要先pull更新
  5. 在pull之后通常有可能出现冲突,联系相关开发组成员后确定冲突的选择后,再运行一下代码看是否有问题
  6. 确认无误后进行push提交
  7. 开发一段时间后,大家需要提交到master分支(主分支),使用merge into主分支,注意冲突处理。
  8. 如果master分支有新内容,可以使用merge from主分支来更新自己的分支

checkout用途

主要用在首次获取项目和本地项目工程整体丢失的时候,直接获取完整的项目的某个分支源码。

比如:我新加入这个项目组,我就需要使用xcode的checkout进行获取

  1. xcode的工具栏 - source control - checkout**
    03-ios-group-git-00

  2. 选择获取源
    03-ios-group-git-01

  3. 选择分支
    如果没有多个分支则只自动获取master分支
    03-ios-group-git-02

  4. 检出项目保存位置
    03-ios-group-git-03

这样一来就获取了一个master分支的项目

commit预提交

使用commit将变更的记录标注为需要提交,并设置要提交的代码说明

如:xcode工具条 - source controller - commit

具体说明见图片
03-ios-group-git-04

pull更新

如果多人同时在同一个分支开发的话,在你commit之后,push之前,有某个开发者commit并push了他的代码,那么服务器的版本就比你本地匹配的服务器版本更加新了,那么直接push就会出现这个问题
03-ios-group-git-05

此时我们就需要先pull进行更新了

source control - pull
03-ios-group-git-06

03-ios-group-git-07

在pull更新后发现Arom和我同时修改了其中的几行,于是出现了歧义警告(红色),需要我来处理。
03-ios-group-git-08

歧义处理有四种方式:

  1. 将服务器(右侧)上的版本的内容插入到我的本地版本(左侧)的下方

    如图:
    03-ios-group-git-08

  2. 以我的版本为准,服务器版本歧义区域无效

    如图:
    03-ios-group-git-09

  3. 以服务器版本为准,我的版本歧义区域无效

    如图:
    03-ios-group-git-10

  4. 将服务器(右侧)上的版本的内容插入到我的本地版本(左侧)的上方**

    如图:
    03-ios-group-git-11

一般来说,如果确认服务器的版本已经无效,则选择以本地版本为准(按钮2)

如果两边版本都有部分或全部有用,则可以选择1或4,然后pull完成后再删除没用的部分在次commit,在此push即可

时刻记住:本地版本是即将要提交到服务器的版本,所有的最终改动在本地完成后,push提交到服务器,就变成了服务器版本

push提交

在处理完上面歧义后,我和Arom沟通后删除了部分内容,再次commit预提交。然后pull检查没有更新了,再push提交到远程服务器git仓

  1. source controll - push
    03-ios-group-git-12

  2. 注意提交的分支
    03-ios-group-git-13

  3. 提交成功
    03-ios-group-git-14

merge合并

在xcode中merge合并分为merge into 和 merge from
merge into:将当前分支合并到另一个分支中
merge from:将另一个分支合并到当前分支中
merge 在 source control - 分支名称 - merge into/from里 如图
03-ios-group-git-15

merge into

比如:我们的代码在devhy分支完成的差不多了,如果需要我们来提交,这时就需要使用merge into
目前我们可选的只有主分支(主分支之前一直没被更新过)
03-ios-group-git-16

这时又发现了冲突歧义,马上联系相关开发者进行处理
03-ios-group-git-17

merge完成,发现我们跳到master分支了,因为我们一切操作是在本地的git仓库操作的,发现我们刚才的操作给主分支的这个文件判断出是有修改的,果断着手commit - pull - push来更新远程git仓服务器的master分支
03-ios-group-git-18
03-ios-group-git-19

这么一来主分支完成了更新,那么就得切回自己的分支继续开发工作了,切换分支(switch to branch)也和merge into一样source control里

因为不确定服务器端的devhy分支是不是最新的,所以我们还是切换成本地的devhy分支
03-ios-group-git-20

注:local branches表示本地的git仓的分支,origin表示是远程git仓服务器的分支列表

merge from

一般merge from是在master分支更新了,保持你的分支能够使用到master分支的新特新来使用的
如:项目管理者在master分支更新了api接口信息或者宏定义之类的,你需要使用到这些新的功能,则需要在你的分支里使用merge from

具体用法和merge into差不多,比如:我们的主分支删除了一些打印,我们得更新,一般系统会自动判断新增右边服务器上的内容
03-ios-group-git-21

然后点击merge即可

谨记提交三部曲:commit-pull-push
pull完成有歧义要处理歧义,处理完成后再走一遍三部曲,直到push成功