Git-字节青训课
本文最后更新于 107 天前,其中的信息可能已经有所发展或是发生改变。如有疑问或错误请反馈至邮箱super.lucky.qu@gmail.com

Git命令

初始化

流程示例

mkdir demo
cd demo
git init
tree .git

其他参数

–initial-branch 初始化分支

–bare 新建裸仓库

–template 可以通过模版创建预先构建好的自定义git目录

配置

git config

配置文件内等级分为三级(逐级递减):

  • system:系统配置,存储在etc/gitconfig内
  • global:全局配置,存储在当前用户文件夹下的gitconfig内
  • local:本地配置,存储在.git/config内

这些等级下的一些配置可能会产生重复,以较低等级的为准

常见的git配置例子:

  • 用户名配置:git config user.name “LuckyQu”
  • InsteadOf配置:git config –global url.git@github.com:.insteadOf https://github.com/
  • 别名配置:git config –global alias.cin “commit –amend –no-edit”

git remote

查看remote

git remote -v

添加remote

git remote add

在同一个Origin上添加不同的push和fetch URL

git remote add origin git@github.com:git/git
git remote set-url –add –push origin git@github.com:My_resp/git

SSH Remote

URL: git@github.com:git/git.git

Key目前有四种类型,RSA,DSA,ECDSAECDSA,ED25519,默认为RSA,推荐使用ED25519

例:ssh-keygen -t ed25519 -C “super.lucky.qu@gmail.com”

提交代码

Object

在git当中,blob,tree,commit,tag都属于Object,其中,blob存储文件的内容,tree存储文件的目录信息,commit存储提交信息,一个commit可以对应唯一版本的代码

在一次提交中,通过commit寻找到tree的信息,每个commit都会存储对应的tree的id,再通过tree存储的信息获得目录树的内容,通过tree中记录的blob的ID来获得blob中的文件内容

Refs

refs的内容就是对应的commit ID,可以把refs当作指针,指向对应的Commit来表示ref的版本

Branch

可以通过git checkout -b来创建一个新分支,分支一般用于开发阶段,是可以不断添加commit进行迭代的

Tag

标签一般表示的是一个稳定版本,指向的commit一般不会变更,通过git tag命令生成一个tag

附注标签

一种特殊的Tag,可以给Tag补充一些额外的信息

通过git tag -a 来完成附注标签的创建

git add

git add 文件名

git commit

git commit 文件名

commit内会存储parent commit字段,通过commit的串联获取历史版本代码

commit -amend可以修改最近的一次提交(ID会改变)

远端同步

拉取代码

clone

拉取完整的仓库到本地目录,可以指定深度,分支

pull

拉取分支并进行合并,等同于fetch后merge

fetch

将远端某些分支的最新代码拉至本地,不会执行merge操作,会修改refs中的remote内的分支信息,要和本地代码合并需要手动操作

推送代码

push

将本地代码推送到远端,使用git push origin main即可

开发流程

不同的工作流

类型代表特点合并方式
集中式工作流Gerrit / SVN只依附主分支进行开发,不存在其他分支fast-forward
分支管理工作流Github / Gitlab可以定义不同特性进行开发分支,上线分支,在开发完成后通过MR/PR合并进主分支自定义,fast-forward或者Three-way merge都可以

集中式工作流

只依托主分支进行研发

流程:拉取代码到本地->直接在主分支完成修改->提交前拉取代码合并处理冲突(如有)->提交本地代码到主分支

基本原理

  1. 依托于 Change ID 概念,每个提交生成一个单独的代码评审
  2. 提交上去的代码不会存储在真正的 refs/heads/下的分支中,而是存在一个 refs/for/ 的引用下
  3. 通过 refs/meta/config 下的文件存储代码的配置,包括权限,评审等配置,每个 Change 都必须要完成 Review 后才能合入

分支管理工作流

分支管理工作流特点
Git Flow分支类型丰富,规范严格
Github Flow只有主干分支和开发分支,规则简单
Gitlab Flow在主干分支和开发分支之上构建环境分支,版本分支,满足不同发布or环境的需要

上一篇
下一篇