文章目录
- Git版本控制、分支策略与代码评审
-
- Git介绍
- Git工具与代码托管网站
- Git原理
- Git常用命令
- Git使用场景
-
- 场景1: 在GitLab上新建一个repository
- 场景2:将GitLab上一个repository clone到本地
- 场景3:创建一个本地分支
- 场景4:将本地分支的改动push到GitLab
- 场景5:用户A/B同时修改同一个文件,A先提交,B后提交,解决冲突后push到GitLab
- 场景6:在本地改动后,在`git add` 前回退
- 场景7:在本地改动后,在`git push` 前回退
- 场景8:在本地改动后,在`git push`后回退
- 场景9:查看文件修改历史
- 场景10:在GitLab上设置分支保护,要求只有通过merge request才能合并代码
- 场景11:本地改动后,push到本地分支,然后在GitLab上发起merge request
- 场景12:代码审查,通过merge request
- 场景13:代码审查,拒绝merge request
- 场景14:将本地的一个新项目放在GitLab上
- 使用GitHub来学习提升
- 分支策略
- 代码评审
- 思考: 什么文件不应该放在Git上?
- Git 学习资料
Git版本控制、分支策略与代码评审
Git介绍
- Git是一种免费的、开源的分布式版本控制系统(DVCS)
- Git是目前使用最为广泛的版本控制系统
- Git是由Linus Torvalds开发的 (这位IT界的大神同时也是Linux的作者)
- Git的第一个版本(v0.99)在2005年7月发布,最新版本是v2.17(截止2018年4月)
- Git支持Windows, Linux/Unix, Mac
- 和商业版本控制系统相比,Git免费、开源且更强大、稳定、快速
- 和传统版本控制系统(比如CVS, SVN)相比,Git具有支持轻量级分支、分布式开发、高性能等优点。
- Git支持命令行操作,可以非常方便地集成到CI/CD pipeline中
参考文档:
-
https://en.wikipedia.org/wiki/Git
-
Git官网: https://git-scm.com
Git工具与代码托管网站
在Windows上安装使用Git
登录Git官网: https://git-scm.com/ 下载Git for Windows,安装后有3个程序:
- Git Bash (模拟Linux终端)
- Git CMD (Windows终端)
- Git GUI (Windows界面)
推荐使用Git Bash,Git CMD和Git GUI可以忽略。
在Linux/Unix和Mac上使用Git和在Windows上使用Git Bash一样,不再赘述。
IDE支持Git
现在主流的IDE(比如Intellij Idea和Eclipse) 都对Git有非常好的支持。
推荐通过IDE + Git Bash 方法来使用Git。
代码托管网站
- 全世界最大的代码托管(同性交友)网站: https://github.com/
- 可以免费搭建自己的代码托管网站的GitLab: https://gitlab.com/
- Atlassian公司全家桶的过气网红: https://bitbucket.org/
如何选择?
- 土豪自己搭建GitHub Enterprise
- Atlassian铁粉用BitBucket
- 中产用GitLab Enterprise
- 屌丝自己搭建GitLab CE (我是屌丝我自豪)
- 最屌丝用国内的代码托管网站…
Git原理
Git工作流
下图列出了一个简明的Git工作流:
Git 分支
概述
-
分支(branch)可以理解为是仓库(repository)的一种隔离视图。
-
分支的目的为了支持多人、多版本开发。
-
Git支持多分支开发,并鼓励使用本地多分支,这些分支之间是彼此完全独立的。
-
和传统的版本控制工具(比如CSV, SVN)相比,Git对分支的隔离是逻辑隔离而不是物理隔离,这意味着创建分支非常快速、存储分支不会占用过多磁盘空间
-
常见的分支操作包括:创建分支、切换分支、合并分支、删除分支。
参考文档:
- https://git-scm.com/about/branching-and-merging
理解如何使用Git分支
这里以GitHub Flow为例 来演示常见的分支操作。
打开GitHub Flow ,点击动画上的不同区域来理解常见的分支操作:
-
创建分支
- 给分支名取一个简短且有意义的名字
-
提交改动
-
填写有意义的commit message: what & why
-
推荐的commit message格式为
<Item Id>: <Description>
,比如:512: 增加了对NFS的支持
-
-
发起合并请求
- 同时发起code review和讨论
- 不经过review的代码不允许合并进public branch
-
代码评审和讨论
- 审查代码是否满足功能、规范、测试结果、测试覆盖等要求
- 审查合格才允许合并合进public branch,不合格的代码退回重新修改
- 鼓励使用同行评审(Peer Review)而不是上下级评审,鼓励积极反馈、互动
- 评审对事不对人,多建议,不批评,不指责
- 评审过程对reviewer和代码提交者双方都是一个学习提升的过程
-
部署
- 使用经过完整测试的分支来部署到生产环境
- 部署后发生问题需要回退时,用上一个版本进行回退
-
合并回master分支
- 部署成功,没有问题后才合并到master分支
GitHub Flow是一种非常好的Git分支策略,但不是唯一的Git分支策略。
在后面的分支策略中会对Git分支策略作深入探讨。
Git常用命令
参考文档
- git no deep shit: http://rogerdudler.github.io/git-guide/
- 常用Git命令清单(阮一峰): http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
- git操作规范(Miss_Ye): https://segmentfault.com/a/1190000014461898
除了查看网上的参考文档之外,还可以在Git Bash中执行git --help
或 git <command> --help
来查看Git帮助文档。
Git使用场景
下面列出常用的Git使用场景。
场景1: 在GitLab上新建一个repository
如果不想让公众都能看到你的代码,需要将repository设置为private,并将相应权限授给团队成员。
强烈推荐为每个repository创建README.md和.gitignore文件。
强烈推荐对repository的public branch进行保护,只有通过merge request才能合并代码进public branch。
场景2:将GitLab上一个repository clone到本地
GitLab支持SSH和HTTP(S)两种方式。
- SSH方式需要将本地的SSH public key添加到GitLab账号的setting中
- HTTP(S)方式第一次push到GitLab时需要提供用户名和密码登陆
设置git config的user.name
和 us