这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
Git的使用姿势与最佳实践
方向介绍
- 代码托管
- 代码智能
- 代码分析
- 持续集成
- Cloud IDE: 开箱即用的云端开发环境
学习Git原因
- 协同工作:团队合作时的必备工具
- 开源社区:参与开源项目
课程目录
- Git是什么
- 介绍版本控制的发展历史,为什么会出现Git
- 介绍Git的发展历史
- Git基本使用方式
- Git基本命令介绍
- Git研发流程
- 依托代码管理平台Gitlab/Github/Gerrit介绍我们如何进行代码的开发以及团队合作
Git是什么
- 分布式版本控制系统
代码修改编辑的记录器,重要功能 回退 合并 等, 关注变更 - 关于版本控制的发展与变更
本地 > 集中 > 分布式
RCS > SVN > Git- RCS:保存所有diff,即保存更改
- SVN:服务器保存diff,需提前解决冲突
- 优点:
- 学习简单,便于操作
- 支持2进制文件,对大文件友好
- 缺点:
- 本地没有版本管理,必须连接服务器。。。
- 分支支持不友好,不利于大型团队合作
- 服务端若故障则会导致历史版本丢失
- 优点:
- Git:
- 每个库均保存完整提交历史,可以完全本地操作
- 每次保存完整文件快照,不再只记录diff
- 可以和远端同步
- 优点:
- 分布式开发
- 方便团队合作,多人协同
- 一般只添加,很少删除
- 缺点:
- 操作相对复杂
- 对大文件支持不是很友好
注:git-lfs工具可以弥补大文件功能
-
常用平台
- Github:全球最大的代码托管平台
- Gitlab:全球最大的开源代码托管平台
- Gerrit:Google开发的代码托管平台,代表开源项目——Android
-
常用使用方式
- 配置
git configgit remote
- 提交代码
git addgit commit
- 远端同步
- 拉取代码
clonepullfetch
- 推送代码
push
- 拉取代码
- 配置
-
Git研发流程
- 工作流
- 集中式工作流:只有主分支——Gerrit
- 分支管理工作流
- 如何选择合适的工作流
- 小型团队,使用Github
- 尽量保证少量多次,不要一次提交上千行代码
- 提交Pull Request后最少需要保证有CR再合入,即有更新之后再合入
- 主分支尽量保持整洁,使用fast-forward合入方式,合入前进行rebase,即使用最简单的合并方式,尽量减少冲突的发生
rebase在合并分支前合并多次提交,减少提交次数,提高简洁度,尽量在推送前使用
- 大型团队,根据实际需要选择
- 小型团队,使用Github
- 工作流
常见问题与命令
- 删除某一次提交记录,使用
git rebase -i + 哈希地址 或者 tag,但是删除后会出现冲突,需要根据命令行提示解决冲突,才能删除成功。 git branch -a查看本地以及远程分支git branch -d + 分支名删除分支,但是需要先切出待删除分支git remote prune origin同步远程分支到本地,用于远程仓库删掉分支后本地还存在的情况git checkout + 分支名切换分支,vs code 直接点击右下角的分支即可,如下图:但是需要注意的是,切换分支之前必须要在当前分支完成提交,可以不用完成同步,否则会覆盖当前分支。也可用于切换当前分支不同版本
- 使用vs code可以直接创建新的代码仓库,也能拉取已存在的代码仓库进行修改。也就是说创建一个代码仓库编写代码有两种方式,一种是在Github上创建,然后在本地clone对应代码仓库,开始工作。也能直接创建新文件夹,初始化git,编写好直接提交推送,如果不存在该仓库,则会自动创建,个人建议创建新的代码仓库,采用第二种,我认为更方便一些。
- 推送至Github时,经常会报错,因为连接不上了,等一段时间重试即可,暂时没有别的办法。设置代理可能能成功,还未尝试(前提是有vpn的情况下)。经过实际尝试,使用vpn设置代理可以解决推送不稳定的问题
git configgit本地设置命令
git config -e设置当前仓库git config -e global设置全局配置,即所有仓库
git reset回退版本- 大部分的git命令能实现的操作,vs code都能直接使用,如下图:
- 当有重要版本要发布之前,打上版本标记,标记功能在上图中,commit之后同步之前打上标记,标记如:v1.0
- 使用git进行工作时,首先创建自己的分支,在分支上工作,测试无误后再合并到主分支上
git log --pretty=oneline查看精简的日志git push origin :分支名同步删除远程分支,注意:后无空格
附上git学习网站: