Git的使用
git是一款开源的分布式版本控制工具
分布式和集中式的最大区别在于:在分布式下
- 开发者可以本地提交
- 每个开发者机器上都有一个服务器的数据库
工作原理
如果想了解git的工作原理,有几个核心概念必须知道
工作区(Working Directory):仓库文件夹里除.git目录以外的内容
版本库(Repository):.git目录,用于存储记录版本信息
暂缓区(stage)
分支(master):git自动创建的第一个分支
HEAD指针:用于指向当前分支
git add和git commit的原理
git add :把文件修改添加到暂存区
git commit :把暂存区的所有内容提交到当前分支
工作原理:
工作区的文件 –git add–> 版本库的暂缓区
暂缓区 –git commit–> 分支
创建配置仓库
初始化本地仓库
1 | git init |
配置仓库, 配置完成之后在.git的config文件查看或者通过控制台指令
1 | git config user.name "danzi" |
个人开发
基础
文件状态
- 红色: 代表被添加或者修改的文件没有被添加到暂缓区
- 绿色: 代表文件在暂缓区,等待提交
1 | git status |
日志查看
- 版本号是一个由SHA1生成的40位哈希值
- 这样做的目的是保证版本号的唯一
1 | git log 查看日志 |
彩色日志
1 | // 配置 |
配置别名
1 | git config alias.st “status” |
全局配置
- –global进行全局配置,所有的版本库共享此配置
- 查看全局配置(桌面前往->个人->.gitconfig
添加文件并提交
1 | touch 文件 |
修改文件并提交
1 | git add . |
删除文件并提交
1 | git rm Dog.h |
1 | git add . |
版本回退
修改未提交的回退
重置到当前版本
1 | git reset —-hard HEAD |
修改且提交的回退
1 | git reset —-hard HEAD^^ 重置到上上个版本(有几个^前几个版本) |
团队开发
** 团队开发必须有一个共享库,这样成员之间才可以进行协作开发**
基础
共享库分类
- 本地共享库(只能在本地面对面操作)
- 电脑文件夹/U盘/移动硬盘
- 远程共享库(可通过网络远程操作)
- 自己搭建Git服务器(不建议)
- 在Github上托管项目(** 建议**)
- Github网址(https://github.com); 公开项目免费, 私有项目收费
- 在OSChina上托管项目(** 推荐**)
- OSChina网址(https://git.oschina.net) 安全免费,在国内访问速度快
1. 搭建本地共享库
原因: 多人合作开发,代码共享
1 | git init --bare |
2. 经理初始化项目到本地共享库
1 | git clone 本地代码仓库地址 |
3.多人进行开发
新建两个用户
创建经理, 葫芦娃两个文件夹, 进入文件夹从共享代码库clone到本地
1 | mkdir jingli |
1 | mkdir huluwa |
新增文件同步
经理添加文件到工作区, 通过控制台将文件添加到暂缓区, 然后提交到共享库
1 | touch file.h |
葫芦娃从共享库更新
1 | git pull |
修改文件同步
葫芦娃修改文件并提交到共享库
1 | git add . |
经理从共享库更新
1 | git pull |
删除文件同步
经理删除文件并提交到共享库
1 | git rm file.h |
葫芦娃从共享库更新
1 | git pull |
解决冲突
经理修改文件并提交到共享库
1 | git add . |
葫芦娃修改文件并提交到本地库
1 | git add . |
葫芦娃提交共享库发生错误, fetch first 代表当前文件过期,需要从远程共享库更新
1 | git push 出错 |
葫芦娃重新从共享库更新本地库数据, 发生冲突, 修改冲突文件重新提交
1 | git pull |
忽略文件
1 | touch .gitignore |
.gitignore文件配置规则, 参见Git的.gitignore配置
在真实开发中,配置.gitignore文件 , 去github里面搜索gitignore 选择OC版本的,拷贝到本地仓库即可,记得添加到本地版本库
git bug处理
创建共享库
1 | git init --bare |
正常开发
创建经理文件夹, 克隆
1 | git clone 共享库地址 |
添加忽略文件, 提交到共享库
1 | 把忽略文件添加到工作区 |
Xcode创建项目, 完成功能1后提交到共享库
(该步控制台操作也可通过Xcode完成)
1 | 项目添加到工作区(如果是xcode进行操作, 则直接添加到暂缓区) |
添加标记, 查看标记后上传到共享库
1 | git tag -a v1.0 -m "备份1.0版本" |
发现bug
开发2.0时候发现1.0有bug, 备份当前进度上传到共享库
1 | 开发新功能 |
处理bug
创建葫芦娃文件夹, 克隆
1 | git clone 共享库地址 |
根据v1.0版本建立新分支v1.0fixbug并切换到此分支
1 | git checkout v1.0 -b v1.0fixbug |
解决bug后, 提交到本地库, 添加标记后上传到共享库
1 | 解决bug |
葫芦娃上传整个分支到共享库
1 | git push origin v1.0fixbug |
合并代码
更新本地master分支
1 | git pull |
合并远程v1.0fixbug分支到本地master分支
1 | git merge origin/v1.0fixbug -m "合并分支解决bug" |
提交本地库上传到共享库
1 | git push |
修复已发布版本bug操作流程
- 程序员在Trunk完成1.0, 提交
项目经理添加到tags中进行重大版本备份v1.0
程序员在Trunk继续开发2.0
1.0发现重大bug, 程序员2.0尚未完成
项目经理从tags的备份中拷贝一份到branch中 v1.0fixbug, 给程序员授权branch中V1.0fixbug的权限
程序员把目前2.0进度保存到Trunk
程序员debug
项目经理将v1.0debug添加到tags进行重大版本备份v1.1
项目经理从Trunk中下载一份目前2.0尚未完成的代码, 将branch中的已经debug的v1.0fixbug合并到当前2.0进度代码中
程序员update, 继续开发