Git 原理与最佳实践

82 阅读2分钟

唯一算是还略懂一点的东西了,这次就当正好完整架起来一个知识体系,然后更重要的是学习一下平常想找都找不到的最佳实践吧

image.png

Git 是什么

版本控制软件对比

image.png

image.png

远程仓库托管平台对比

image.png

基本使用方式

Git 目录介绍

image.png

Git 内部配置

  • 常见配置 image.png

Git Remote

  • 可以把 push 和 fetch 的 remote 设置成不同的
    • 都会设置到内部 .gitconfig

HTTP Remote

  • 不太安全,存在硬盘也不太方便

image.png

SSH Remote

  • 大致就是本地生成私钥,然后添加到GitHub就行了
  • 需要使用 InsteadOf 配置替换掉原来的 HTTP 连接方式

Object

Git Add

会新增一个加密的 object

image.png

Git Commit

也会新增很多 object 信息,会有目录树,提交者等信息

image.png

分类

  • blob 存储内容
  • Tree
  • Commit

如何串联在一起

image.png

image.png

Ref

  • 就是指向 Commit ID 的指针
  • git tag
    • Tag 表示稳定版本,相比 Ref 是不会变更的,一般会作为一个发布版本,其实也是 Ref 的子概念
    • Annotation Tag
      • Tag Object
      • git tag -a

image.png

历史版本

追溯

  • object 新增 parent 信息,表示指向之前版本的指针

修改

  • commit --amend
  • rebase

  • filter:修改所有提交

Object

  • 老的 Object 并没有被删除,但是没有用了
  • 我们叫做悬空的 obj,没有ref指向它

结构总结

image.png

Git 研发流程

不同的工作流

image.png

集中式工作流

分支管理工作流

具体分类

image.png

GitFlow

  • 严格标准,代码会很清晰
  • 流程过于复杂,正常研发都难以进行

Github Flow

  • 选择团队合作的方式:fork或者直接给权限
  • PR:注意 CI CA CR 等操作,合并 feature 分支
  • 分支保护

Gitlab Flow

  • Princpal: upstream first

image.png

代码合并

  • Fast forward 就是直接合并,移动指针
  • Three-way merge 处理冲突,会产生新的节点

选择合适的工作流&常见问题 (重要)

  1. 小团队推荐 Github
  2. 确保 CR
  3. 保持主干整洁, FF合并与 reabse
  4. 大型团队不要局限流程

image.png

  • 了解新的研发流程
  • 不要频繁使用 TW 合并