Git 的正确使用姿势与最佳实践 | 青训营

80 阅读3分钟

Git是一种分布式版本控制系统,用于跟踪和管理软件开发中的代码变更。它广泛用于协作开发项目,可以有效地管理代码的版本和变更历史。学习使用git是计算机学生的必经之路。

  1. Git是什么
    • 由linus开发 版本控制工具
  2. 基本使用方式
    • 不同级别的git配置
      • local global system 低级别覆盖高级别
    • 用户名配置
    • ssh-keygen -t ed25519 -C "你的邮箱" 配置ssh密钥
    • git status 查看当前git仓库状态image.png
    • tree .git 查看目录树
    • git cat-file -p ID值 通过id值查看文件image.png
    • git commit -m "add readme"
    • git add README.md
    • objects: Blob Tree Commit tag
    • refs 对应的Comiit ID 理解为指针
    • git checkout -b test
    • tags 版本发布
    • git tag v0.0.1
    • git tag -a v0.0.2 -m "add feature 1" 注解标签
    • git log 查看当前提交日志
    • 一次commit 会多三个objects
      • tree object
      • blob object
      • commit object
    • commit 之间通过 parent关连
    • 修改历史版本
      • commit --amend //会产生悬空地object 没有ref指向
      • rebase
      • filter --branch
    • git fsck --lost-found 查找有没有悬空
    • reflog git reflog expire --expire=now --all
    • 指定修剪时间 git gc --prune=now 删除不需要的object 打包压缩需要的
    • 完整的git视图image.png
  3. 协同合作常用命令
    • git clone 可以指定分支 深度
    • git fetch 不会指向merge 需要手动合并(不清楚冲突建议使用)
    • git pull 操作等于git fetch + git merge
      • 也可以通过git pull --rebase 完成git fetch+git rebase
    • git push origin master origin为设置源的名字
      • -f 强制推送 有冲突时会覆盖 由于commit记录不一样导致冲突
      • 可以通过保护分支 防止误操作
  4. 问题
    • 为什么git配置 还是没办法拉取代码
      • 免密没有配置
      • Instead of 没有配 配置的ssh 但通过http访问
    • Fetch会把代码拉取到本地的远端分支 但不会合并到当前分支 当前分支历史没有变化 需要手动merge 或者 rebase
  5. 工作流
    • 集中式工作流 Gerrit
      • 每次提交 需要review
      • 多人开发容易出现冲突
    • 分支管理工作流
      • GitFlow
        • 包含五种分支类型
        • 流程复杂 上线节奏慢
      • Github Flow
        • 只有一个主干分支 基于PR 往主干分支提交代码
        • fork进行开发 开源库的开发方式
        • 分发权限 统一在团队内进行开发 团队使用
        • CI/CD 持续集成(Continuous Integration)和持续部署(Continuous Deployment
        • Branch protection rule(走了一遍设置)
        • 自己走了一遍pr流程
      • Gitlab Flow
        • upstream first 上游优先
    • 代码合并
      • Fast-Forward 不会产生merge节点 合并保持线性历史
        • git checkout -b test
        • 更改文件
        • git add .
        • git commit -m "test"
        • git checkout main
        • git merge test --ff-only 默认是ff
      • Three-Way Merge
        • 三方合并 会产生一个新的merge节点
        • git merge test --no-f
    • 选择合适的工作流
      • 小型团队推荐使用Github工作流
      • 少量多次 不要一次提交上前行
      • 提交PR 最少要保证CR(code review) 再合入
      • 主干分支保持简洁 使用Fast-Forward 进行合并