Git的使用 | 青训营笔记

104 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

Git基本命令

1. 初始化仓库

git init

image.png

其他参数

  • --initial-branch 初始化的分支,不指定默认为master,可以指定为main

  • --bare 创建一个裸仓库(纯Git目录,没有工作目录)

  • --template 可以通过模板来创建预先构建好的自定义git目录 Git目录介绍

  • 查看Git目录

tree .git

image.png

  • HEAD 当前分支
cat .git/HEAD

image.png

  • config 存放当前仓库的配置

  • objects 存储文件信息

  • refs 存储分支信息

2. Git Config

  • 三种级别的Git配置
  1. 全局配置

--global 存放在~/.gitconfig文件中

  1. 系统配置

--system 存放在$(prefix)/etc/gitconfig中

  1. 本地配置

--local 存放在当前仓库目录下的.git/config中

  • system>global>local,低级别配置可以覆盖高级别配置

  • 常见Git配置

  1. 用户名配置
git config --global user.name "max"
git config --global user.email max@bytedance.com

image.png

  1. Instead of配置
git config --global url.git@github.com:.insteadOf https://github.com/

替换url,可以将ssh协议clone换成https,反之亦然

  1. Git命令别名配置
git config --global alias.cin "commit --amend --no-edit"

为Git命令设置别名

  1. 更换Git的编辑器
git config --global core.editor vim

image.png

3. Git Remote

  • 查看 Remote
git remote -v
  • 添加 Remote
git remote add origin_ssh git@github.com:git/git.git
git remote add origin_http https://github.com/git/git.git

image.png

为fetch和push设置不同的远端仓库

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

image.png

  • SSH 免密配置

SSH可以通过生成公私钥的方式,将生成的公钥存放在服务端,实现免密访问,目前的Key有四种类型,分别是dsarsaecdsaed25519,默认是rsa,推荐使用ed25519,生成后公钥默认存放路径为~/ssh/id_ed25519.pub

ssh-keygen -t ed25519 -C "max@bytedance.com"

image.png

可以在GitHub如下位置将公钥的内容添加到Github上

image.png

4. Git Add

git add .

将工作区的代码提交到暂存区

image.png image.png

.git文件夹下的objects文件夹多了一个文件夹,保存了工作区README.md的内容

image.png

文件内容会被加密,可以通过git cat-file -p查看内容

git cat-file -p 3b18e512dba79e4c8300dd08aeb37f8e728b8dad

image.png

4. Git Commit

git commit -m 'add README.md'

image.png

可以看到objects文件夹又多了几个

image.png

同样可以通过git cat-file -p查看内容

git cat-file -p 43b71c903ff52b9885bd36f3866324ef60e27b9b
git cat-file -p e2eac3a35b0cb6dd0ab64e37da8e8cd2209ff489
git log

image.png

5. Objects

以上objects文件夹里新增的三个文件夹分别是blob objecttree objectcommit object,除此之外还有一个tag的object。

  • Blob 存储文件的内容
  • Tree 存储文件的目录信息
  • Commit 存储提交信息,一个Commit可以对于一个版本的代码

Commit中存储了Tree IDTree中存储了Blob IDBlob中存储了文件内容

6. Refs

Refs文件存储的是Commit ID

image.png