唯一算是还略懂一点的东西了,这次就当正好完整架起来一个知识体系,然后更重要的是学习一下平常想找都找不到的最佳实践吧
Git 是什么
版本控制软件对比
远程仓库托管平台对比
基本使用方式
Git 目录介绍
Git 内部配置
- 常见配置
Git Remote
- 可以把 push 和 fetch 的 remote 设置成不同的
- 都会设置到内部 .gitconfig
HTTP Remote
- 不太安全,存在硬盘也不太方便
SSH Remote
- 大致就是本地生成私钥,然后添加到GitHub就行了
- 需要使用 InsteadOf 配置替换掉原来的 HTTP 连接方式
Object
Git Add
会新增一个加密的 object
Git Commit
也会新增很多 object 信息,会有目录树,提交者等信息
分类
- blob 存储内容
- Tree
- Commit
如何串联在一起
Ref
- 就是指向 Commit ID 的指针
- git tag
- Tag 表示稳定版本,相比 Ref 是不会变更的,一般会作为一个发布版本,其实也是 Ref 的子概念
- Annotation Tag
- Tag Object
- git tag -a
历史版本
追溯
- object 新增 parent 信息,表示指向之前版本的指针
修改
- commit --amend
-
rebase
- filter:修改所有提交
Object
- 老的 Object 并没有被删除,但是没有用了
- 我们叫做悬空的 obj,没有ref指向它
结构总结
Git 研发流程
不同的工作流
集中式工作流
分支管理工作流
具体分类
GitFlow
- 严格标准,代码会很清晰
- 流程过于复杂,正常研发都难以进行
Github Flow
- 选择团队合作的方式:fork或者直接给权限
- PR:注意 CI CA CR 等操作,合并 feature 分支
- 分支保护
Gitlab Flow
- Princpal: upstream first
代码合并
- Fast forward 就是直接合并,移动指针
- Three-way merge 处理冲突,会产生新的节点
选择合适的工作流&常见问题 (重要)
- 小团队推荐 Github
- 确保 CR
- 保持主干整洁, FF合并与 reabse
- 大型团队不要局限流程
- 了解新的研发流程
- 不要频繁使用 TW 合并