git | 青训营笔记

87 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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工作流即可,少量多次

大型团队自己指定