这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
今天我学习了字节跳动掘金内部课程的开发与迭代中的git课程
一、为什么要学习Git
协同工作
业界绝大多数公司都基于git进行代码管理,因此git是一个程序员的必备技能
开源社区
绝大多数开源项目都是基于git维护的,参与这些项目的开发都需要使用Git
学习目标
学习基本的git命令,并了解原理,在遇到git相关问题时,能自行排查并解决
了解研发流程中基本概念和规范,学会正确的使用Git
二、Git是什么
git是分布式的版本控制系统
版本控制是什么?
一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
为什么需要版本控制?
更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故发生;也能够随时切换不同的版本,回滚误删改的问题代码
基本原理
- 每个库都存有完整的提交历史,可以直接在本地进行提交代码
- 每次提交记录都是完整的文件快照,而不是记录增量
- 通过push等操作来完成和远端代码的同步
优点
- 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体
- 分支管理功能强大,方便团队合作,多人协作开发
- 校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易导致代码丢失
缺点
- 相对SVN更复杂,学习成本高
- 对于大文件的支持不好(git-lfs工具可以弥补这个功能)(因为每次提交都是完整的文件快照,如果一直提交的话仓库会很庞大)
三、Git的团队协作
github的工作流,只有要个图主干分支,基于pull request往主干分支中提交代码
选择团队合作的方式:
- owner创建好仓库后,其他用户通过Fork的方式来创建自己的仓库,并在fork的仓库上进行开发
- owner创建好仓库后,统一给团队内成员分配权限,直接在同一个仓库内进行开发
Gitlab推荐的工作流是在gitflow和github上做了优化,既保持了单一主分支的简便,又可以适应不同的开发环境
原则上upstream first上游优先
只有在上游分支采纳的代码才可以进入到下游分支,一般上游分支就是master
Fast-forward
不会产生一个merge节点,合并后保持一个线性历史,如果target分支有了更新,则需要通过rebase操作更新后才可以合入
three-way merge
三方合并,会产生一个新的merge节点
如果选择
针对小公司团队合作,推荐github工作流即可,少量多次
大型团队自己指定