这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。
课程资料
为啥会Git很重要呢?
Git在日常使用和研发中的常见问题
- 按照文档进行Git配置,但拉取代码后配置依旧有问题,不会自己排查和解决问题
- 研发中进行一些异常操作,不符合规范,不清楚一些保护开发中不同版本代码的Git方法,例如建立分支、merge、pull request等。
Git的使用群体
- 业界的各大公司
- Open-Source Community 这两个研发最活跃的群体中,绝大部分都使用Git做代码管理,可见学习Git有多重要!
Git是一个版本控制系统(Version Control System, VCS)
下面介绍一下版本控制的三种基本类型:
- 本地版本控制:本地代码的版本控制,代表工具RCS
- 集中式版本控制:提供一个远端服务器来控制代码版本,本地不保存代码版本,解决多人协作问题,代表工具SVN
- 分布式版本控制:每个仓库都记录版本历史,解决只有一个服务器保存版本的问题
Git配置命令
下面将我不是很熟悉的git配置命令整理一下:
Git目录
项目初始化的命令:git init
它有几种不同的参数,例如:
- --initial-branch 初始化的分支
- --bare 创建一个裸仓库(纯Git目录,无工作目录)
- --template 通过模板来自定义Git目录
git config
git config 有不同级别的配置,分别为global(全局),system(系统)和local(局部)。遇到重复配置则低级别覆盖高级别。
下面来看一些例子:
- 用户名配置
- git config --global user.name "xxxx" 设置git用户名
- git config --global user.email email_addr 设置git电子邮箱
- instead of 配置
- git config --global url.git@github.com:.insteadOf github.com 用instead of前面的链接去替换后面的链接,这里用git协议替换掉http协议
- git命令别名配置
- git config --global alias.cin "commit --amend --no-edit" 这样设置之后,原来“commit --amend --no-edit”这样一长串参数则可通过输入一句简单的“cin”即可实现
git remote
通过git remote可以获取并实现本地和远端仓库的关联
- 查看remote:git remote -v
- 添加remote:
- 设置ssh remote的origin:git remote add origin_ssh git@github.com:git/git.git
- 设置https remote的origin:git remote add origin_http github.com/git/git.git
- 同一个origin设置不同的fetch和push url
- 一个仓库可以有多个remote
- 具体命令(ex.改push url):git remote set-url --add --push origin git@github.com:MY_REPOSITORY/git
- 这样设置之后,我们可以从没有权限的仓库fetch代码,push到我们有权限的仓库 github会通过ssh和http协议使本地与remote端进行通信,而这两种协议都需要对身份进行验证。为了不反复输入密码,我们可以通过以下命令来配置一下免密的认证方式:
- 为http remote配置免密
- url: github.com
- 内存:git config --global credential.helper 'cache --timeout=3600'
- 硬盘:git config --global credential.helper "store --file /path/to/credential-file"
- 将秘钥信息存在指定文件中的格式:(user):$(password)@github.com
- 为ssh remote配置免密
- url: git@github.com:git/git.git
- ssh可以通过公私钥的机制,生成公钥存在服务端来实现免密访问
- 目前的key默认使用rsa,但优先推荐使用ed25519
- 命令为:ssh-keygen -t -C "your_email@example.com",秘钥默认存在~/ssh/id_ed25519.pub目录下
小结
这篇笔记主要总结了“Git的正确使用姿势与最佳实践”一课里版本控制和git配置相关的内容。通过复习本笔记可帮助我更深入地了解Git的原理与使用。