0x0 前言
没系统学过git,老是有一些问题就谷歌,解决完问题又没时间记,感觉不是个办法。正好看到一篇敲详细的文章(感谢作者整理),所以决定重头学习一遍并且把难点记录下来。第一次写文章🔰,如果文章有错或者有其它问题欢迎评论指正!
0x1 Git概述
Git的四个组成部分
详情见来源
// stash
区域应该算是一个独立的部分,不受这些命令干扰。
Git中的四类对象
Blob
(块)对象,Tree
(树)对象,Commit
(提交)对象,Tag
(标签)对象。 –来源
每一个对象都会有一个对应的 hash 值 (SHA-1)。
git hash-object <file> # 计算blob的hash
git cat-file [-p|-t] <hash> # -p查看对象内容 -t查看对象类型
blob
一听就知道是个二进制,它只存文件内容。文件名等信息的就在tree
里,很像操作系统的目录表结构。而树对象不仅可以引用blob
,还能引用tree
构成一个多层目录结构,这点像很像文件夹。
git ls-tree <hash> # 查看树对象内容
一个commit
中只记录一个树,鉴于树的套娃结构,commit
里对应的是最根部的树对象。commit
会有一个很短的值,那其实不是完整的 hash 值,只是取前几位作为了缩写(只要唯一就行)。
0x2 Git配置
git config
system
: win 端好像都是C:/Program Files/Git/mingw64/etc/gitconfig
global
: win 端地址C:/Users/<username>/.gitconfig
local
: 项目中.git/config
三种级别配置文件,就近覆盖生效。local > global > system
一般都用 global
# 配置代理:
git config --global http.proxy 'http://127.0.0.1:1080' # socks5:// 好像也可以
git config --global --unset http.proxy # 取消代理
# 设置别名如:
git config --global alias.st 'status -s -u' # 之后可用 git st
这样配置在文件中是这样:(我的.gitconfig
)
[github]
user = <github username>
token = <personal access token>
[http]
proxy = http://127.0.0.1:1080
[alias]
st = status -s -u
cm = commit -m
lg = log --graph --oneline --abbrev-commit
注意:设置了 2FA 两步验证则无法使用
[user]
密码登录,必须提供 token 作为凭据。
.gitignore
Github 官方有专门的一个 仓库 给出各语言的模板。下方匹配模式摘自 来源。
*
:零个或多个任意字符[abc]
:只匹配括号内中的任意一字符[0-9]
:范围内任一字符?
:任意一字符**
:任意的中间目录
# .gitignore
!index.d.ts # 除了这个文件
dir/ # 忽略该文件夹下所有
dir2/**/*.o # 所有dir2下子文件中的.o文件
已经被 tracked 的文件即使加入.gitignore
也无法解除追踪,StackOverflow: