这是我参与「第五届青训营 」伴学笔记创作活动的第10 天
今天学习了版本控制工具git的使用,具体内容如下:
1、Git是什么
Git 是一个免费和开源的分布式版本控制系统,旨在以速度和效率处理从小型到大型项目的所有内容。
版本控制是什么?
- 一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
为什么需要版本控制?
- 更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故发生;也能够随时切换到不同的版本,回滚误删误改的问题代码;
Git易于学习, 占用空间小,性能快如闪电。它优于 SCM 工具,如 Subversion、CVS、Perforce 和 ClearCase,具有廉价的本地分支、方便的暂存区域和 多个工作流等功能。
工作上用的比较多的就是Git了,像Git衍生出的Github,Gitee,Gitlab等等,当然也有其他的公司用Svn
2、为什么要学习Git
协同工作:业界绝大多数公司都是基于Git进行代码管理,因此Git是一个程序员的必备技能
开源社区:目前绝大多数的开源项目都是基于Git维护的,参与这些项目的开发都需要使用Git。
常见问题
- 入职后按照文档进行Git配置,但是配置后依然拉取代码有问题,缺少自己排查配置问题的能力
- 研发流程中进行一 些异常操作,不符合研发规范,不清楚保护分支,MR/ PR等概念
3、Git的基本使用方式
3.1 常见Git配置
用户名配置
// 对当前用户的所有仓库有效
git config --global user.email "你的名字"
git config --global user.email "你的邮箱"
git config命令查看用户名,邮箱
git config user.name
git config user.email
3.2 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
3.3 Git Clone & Pull & Fetch
Clone
- 拉取完整的仓库到本地目录,可以指定分支,深度。
Fetch
- 将远端某些分支最新代码拉取到本地,不会执行merge操作,会修改refs/remote内的分支信息,如果需要和本地代码合并需要手动操作。
Pull
- 拉取远端某分支,并和本地代码进行合并,操作等同于git fetch + git merge,也可以通过git pull --rebase完成git fetch + git rebase操作。可能存在冲突,需要解决冲突。
3.4 Git Push
Push是将本地代码同步至远端的方式。
常用命令
一般使用git push origin master命令即可完成 冲突问题
- 如果本地的commit记录和远端的commit历史不一致,则会产生冲突,比如git commit --amend or git rebase 都有可能导致这个问题。
- 如果该分支就自己一个人使用,或者团队内确认过可以修改历史则可以通过git push origin master -f 来完成强制推送,一般不推荐主干分支进行该操作,正常都应该解决冲突后再进行推送。
推送规则限制
- 可以通过保护分支,来配置一些保护规则, 防止误操作,或者一些不合规的操作出现,导致代码丢失。
4、常见问题
-
为什么我明明配置了Git配置,但是依然没有办法拉取代码?
- 免密认证没有配。
- Instead Of配置没有配,配的SSH免密配置,但是使用的还是HTTP协议访问。
-
为什么我Fetch了远端分支,但是我看本地当前的分支历史还是没有变化?
- Fetch会把代码拉取到本地的远端分支,但是并不会合并到当前分支,所以当前分支历史没有变化。
5、总结
Git 是一个分布式版本控制工具,由 linus 开发,衍生出 github gitlab gerrit 等平台 Git 配置,Git 代码提交,Git 代码同步基本命令,以及 git 管理代码的原理;帮助我们更好的知道如何正确使用 Git 命令 讲述不同的研发流程,有以 gerrit 为代表的集中式工作流,和 gitlab/github 为代表的分支管理工作流,讲述了一些代码提交规范,保护分支,codereview 等概念,帮助我们规范研发流程 。