Git 是什么
1.1 版本控制
版本控制:记录每一次的版本变化
为什么:更好的关注变更,了解每个版本的改动,方便检查,预防事故发生;随时切换,回滚问题代码
1.1.1 本地版本控制
RCS基本原理:本地保存所有的变更 Diff
1.1.2 集中版本控制
SVN 基本原理:
- 提供一个远端服务来保存文件,所有用户的提交都提交到该服务器中
- 增量保存每次提交的 Diff,如果提交的增量中和远端现存的文件存在冲突,则需要本地提前解决冲突
优点:
- 学习简单,更容易操作
- 支持二进制文件,大文件友好
缺点:
- 本地不存储版本管理的概念,所有提交都只能联上服务器后才可以提交
- 分支上的支持不够好,对于大型项目团队合作比较困难
- 用户本地不保存所有版本的代码,如果服务端故障容易导致历史版本的丢失。
1.1.3 分布式版本控制
Git 基本原理:
- 每个库都存有完整的提交历史,可以直接在本地进行代码提交
- 每次提交记录的都是完整的文件快照,而不是记录增量
- 通过 Push 等操作来完成和远端代码的同步
优点:
- 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体
- 分支管理功能强大,方便团队合作,多人协同开发
- 校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易导致代码丢失
缺点:
- 相对 SVN 更复杂,学习成本更高
- 对于大文件的支持不是特别好 (git-lfs 工具可以弥补这个功能)
1.2 Git 发展历程
- Github
- Gitlab:便于服务器搭建
- Gerrit:Andriod
Git 基本命令
Git基础使用指南-命令详解 - 会飞的一棵树 - 博客园 (cnblogs.com)
- 配置
git configgit remote
- 提交代码
git addgit commit
- 远端同步
- 拉取代码
clonepullfetch
- 推送代码
push
- 拉取代码
明明配置了 Git,还是不能拉取代码?
- 没有配置免密认证
- 配的 SSH 免密配置,但使用 HTTP 协议访问
Fetch 了远端分支但是本地的分支没有变化?
- Fetch 会拉取代码到本地的远端分支,但不会合并到当前分支
2.1 Git 目录介绍
项目初始化:git init
其他参数:
--initial-branch=main/-b main初始化的分支名称(默认是 master)--bare创建一个裸仓库--template通过模板来创建构建好的自定义git目录
2.1.1 Git Config
不同级别:
- global: ~/.gitconfig
- system: $(prefix)/etc/gitconfig
- local: .git/config
2.1.2 常见 Git 配置
- 用户名配置
git config --global user.name "xxx"
git config --global user.email xxx@bytedance.com - Instead of配置
git config --global url.git@github.com:.insteadOf https://github.com/ - Git命令别名配置(简化命令)
git config --global alias.cin "commit --amend --no-edit"
2.2 Git Remote
- 查看:
git remote -v - 添加:
git remote add origin_ssh git@github.com:xxx/xxx.gitgit remote add origin_http https://github.com/xxx/xxx.git
- 同一个 origin 设置不同的 push 和 fetch url
git remote set-url --add --push origin git@github.com:yyy/xxx
也可以直接修改 .git/config
2.2.1 HTTP Remote
相对不安全
2.2.2 SSH Remote
怎么给Git配置多个SSH Key? - 知乎 (zhihu.com)
详解:为GitHub、Gitlab账号同时添加、管理多个SSH-Key_gitlab key 多个_Web Boy的博客-CSDN博客
2.3 Git Add
工作区 -> 暂存区
2.4 Git Commit
暂存区 -> git 目录
git log
git checkout -b xxx:切换分支
2.10 Objects
commit --amend修改后会出现悬空commit
2.11 Git GC
git reflog expire --expire=now --allgit gc --prune=now
保护:Branch protection rules