Git与版本控制
Git是一个免费、开源的分布式版本控制系统。
版本控制:指的是在多人协作软件开发过程中,对各种程序代码、配置文件及说明文档等文件迭代变更的一种管理方式。
常见的版本控制系统:
- Git:原始支持命令行的,后续也出现了GUI界面工具。
- Svn:GUI界面支持。
网站的使用
学习版本控制系统为什么要使用网站?
在版本控制系统中,有“仓库”的概念,而仓库有本地仓库和远程仓库之分。远程仓库的目的在于便于将“仓库”中的东西共享给其它人。例如:某北京分公司需要将代码分享给某上海分公司。而远程仓库的使用就是对网站(例如github、gitee等)的使用。
考虑到Github网站为境外网站,访问速度不佳,本次学习使用gitee替代。但两者使用的方式基本一样,功能也基本一致。
gitee注册:https://gitee.com/signup
新建仓库
注意点:
- 一个账号可以建立n个仓库
- 每个项目对应一个仓库
- 仓库有公开和私有之分
- 按照图示进入新建仓库的页面
- 按照表单提示完成表单的内容填写
- 建立仓库成功
仓库主界面功能
- 统计
- Watch:关注该仓库的人数(后期仓库项目有进度更新,则关注的人会收到通知)
- Star:收藏该仓库的人数(后期仓库项目进度有更新不会收到通知的)
- Fork:引用,将不错项目的仓库里的代码复制一份到自己的账号下,产生同名的仓库
- 代码
- 点击之后查看仓库的代码
- Issues
- 讨论区,用于对于项目中可能存在的问题进行交流讨论
- Pull Requests:将引用的(fork)版本推送给被引用的仓库(需要原始仓库负责人去审核)
- Wiki:在线编写项目的使用或者说明文档的
- 管理
- 删除仓库:不是特别需要,则不要进行这个操作
- 仓库成员管理:团队协作往往是很多人参与进来,这个时候就需要邀请成员来参与
- 克隆/下载:让用户去下载远程仓库的代码到他们本地机器上的操作
Git工具的使用
1、下载&安装Git
下载安装地址,按需求自行下载 https://git-scm.com/downloads
MacOS系统下载安装方式(2选1):
- 先安装
homebrew
,随后执行brew install git
(好处:要什么装什么)- AppStore中安装
Xcode
(好处:简单)
2、Git工作流程图
以下仓库指的是本地仓库
3、Git的使用(重点)
①首次使用Git的准备工作
# 填写注册Gitee时候的用户名(后续使用其它平台的时候建议做替换操作)
git config --global user.name "你的用户名称"
# 填写注册Gitee时候的邮箱(后续使用其它平台的时候建议做替换操作)
git config --global user.email "你的邮箱"
# 如果随便写后续有影响吗?
# 如果就使用功能上而言,没有影响。但是不建议,否则代码会识别成其它人提交的。
②本地仓库建立 (先创建项目的文件夹,进入后再执行)
git init
③本地与线上仓库同步
a. 本地没有仓库
a1. 本地没有仓库,直接将线上克隆到本地,克隆完毕直接关联
git clone 远程仓库地址
a2. 本地没有仓库,新建本地仓库,随后通过命令使得本地与线上仓库关联
cd 项目空路径
git init
# touch:新建文件README.md
touch README.md
# 将文件添加到暂存区
git add README.md
# 将文件添加到本地仓库(建议给注释加上引号,防止有空格)
git commit -m "init"
# 将当前仓库与远程仓库建立对应关系
git remote add origin 远程仓库地址
# 提交本地仓库的代码到远程
# 如果是首次则使用:git push -u origin master
# 该命令中master(master是分支)是可变的,后续不一定每次都是master
# 如果首次提交后,以后每次想将代码再提交到远程,则请直接使用git push
git push -u origin master
b. 本地有仓库,与线上远程仓库关联
cd 仓库路径
git remote add origin 远程仓库地址
git push -u origin master
若冲突,无法提交,则检查git是否被代理
git config http.proxy
然后输入
git config --global --unset http.proxy
④提交更改到暂存区(提交全部文件)
git存在一个提示性的命令,能够让我们在工作时候摸鱼回来提示我们下一步该干啥:
git status
git add . 提交全部文件
⑤提交更改到本地仓库
git commit -m 注释内容
⑥将本地仓库代码提交到远程仓库
git push
⑦将线上代码拉到本地(线上→本地同步操作)
git pull
新手上路守则
- 上班第1天
- git config
- git clone
- git add .
- git commit
- git push
- 上班第2天
- git pull
- git add .
- git commit
- git push
- 上班第3天
- git pull
- git add .
- git commit
- git push
- …
4、免密操作
该操作是可选的,只是多增加了一个鉴权的方式而已。
核心:公私钥对的验证
① 产生公私钥对
ssh-keygen -t rsa -C cherish@cherish.pw
产生完毕后,公私玥对位于c/Users/用户名/.ssh/
:
- id_rsa:私钥(私有的钥匙,不能公开)
- id_rsa.pub:公钥(可以公开的钥匙)
② 将公钥上传至远程仓库个人中心的设置里
以gitee为例,添加公钥请访问:https://gitee.com/profile/sshkeys
备注:之前使用的是基于https的方式,那种方式是通过账号密码鉴权的;如果想用现在的免密登录,请使用ssh协议去关联本地与线上仓库。
5、分支操作(重点)
分支的概念及作用:分支在实际开发的时候一般会按照功能模块进行划分,团队协作开发的时候每个人都有自己的分支。各自会在自己的分支上开发,可以防止和别人产生冲突。在自己分支上开发的内容并不能算项目(其只是项目的一部分),在写完之后需要与其它分支进行合并的。
掌握的点:
-
如何查看分支
-
git branch # 分支列表中名字是绿色的,且前面有*号的,则表示当前的分支名
-
如何创建分支
-
git branch 分支名 # 创建只是在本地创建,不会在线上仓库同步创建 # 如果也需要线上有这个仓库,则需要push git push -u origin 分支名
-
如何切换分支
-
git checkout 分支名
-
如何合并分支
-
# 先需要进入到要 合并到的 分支(例如:user -> master) git checkout master git merge 被合并的分支名 # 最后如果需要同步到线上远程仓库,则需要在合并到的分支中执行git push git push
-
如何删除分支
-
git branch -d 分支名
6、代码冲突
线上仓库与本地仓库不同步时,直接修改本地仓库再提交的时候会出现的问题。
线上先改了没给本地说,本地也改了,然后提交,就会冲突
上述体现就是冲突,在其中已经体现出哪个文件发生了冲突。
找到该文件
例如上述css文件最终保留我们需要提交的内容可能是:
p {
text-align: center;
}
* {
font-size: 20px;
color: #fff;
line-height: 40px;
}
解决好之后再去执行git add
、git commit
、git push
7、版本回退(Git中的时光机)
场景:代码经过不断的迭代,后续可能需要使用以前的某时候的代码,但是这个代码在现在代码中已经没了。
步骤:
- 查看日志,获取版本号
# 查看提交的历史
git log
# 查看提交的历史(格式化)
git log --pretty=oneline
- 依据版本号回退到指定版本
# HEAD形式的两种回退方式不推荐用,原因:回去之后回不来了
# 回退到上个版本
git reset --hard HEAD^
# 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard HEAD~3
# 推荐用后面这个(可以跳转到指定的时候,过去可以,未来也可以)
# 回退到指定版本
git reset --hard commit_id
# commit_id在用的时候不必非得写全,一般7个前面的字母组合就完全够了
Vim界面
若git commit后不小心进入了vim界面