Git&GitHub
目前很多公司都选择Git版本控制工具,所以需要补充这个知识。
版本控制工具应该具备的功能
协同修改
多人并行不悖的修改服务器端的同一个文件。
数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空 间,提高运行效率。
这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式。
权限控制
对团队中参与开发的人员进行权限控制
对团队外开发者贡献的代码进行审核——Git 独有。
历史记录
查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。
分支管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
版本控制简介
版本控制
在 IT 开发过程中使用版本控制思想管理代码的版本迭代。
版本控制工具
思想:版本控制
实现:版本控制工具
集中式版本控制工具
CVS、SVN、VSS……
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ysvsxnjy-1605520246990)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111135100076.png)]
集中式版本式通过一个服务器来统一管理数据,需要联网
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ypb44Ho5-1605520246994)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111135214447.png)]
分布式版本控制工具,是通过本地保存的,不需要联网。不过一般分布式也有个服务器,但用法不同于集中式的。
Git 简介
Git官网
官网地址:https://git-scm.com/
Git的优势
- 大部分操作在本地完成,不需要联网
- 完整性保证
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与 Linux 命令全面兼容
Git安装步骤
开始安装的界面
安装路径
选择安装组件–推荐全选哟!
菜单文件夹–没什么要讲的 默认!
修改系统的环境变量—建议选择上面两个(我是第一个)
SSL的证书的选择
配置行尾结束符(默认)
行尾结束符介绍
Unix-style和Windows:简单说:windows<回车换行> (carriage return AND line feed)使用:“\n\r” 换行;Unix<换行> (carriage return)下使用:“\n”;各个系统换行问题:
配置终端仿真
其他的配置–默认即可
使用
在任意地方,右键GitBash Here就可以啦
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-odkDxqWI-1605520247028)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111142407687.png)]
使用过程问题解决会汇总
如果中文没有正常显示,请求鼠标右击选择“option"选项,更换语言即可。
Git结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RizsYM9v-1605520247033)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111142456853.png)]
Git和代码托管中心
代码托管中心的任务:维护远程库
局域网环境下:GitLab 服务器
外网环境下:GitHub和码云
本地库和远程库的关系
团队内部协作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QWeLc6NN-1605520247036)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111142719989.png)]
跨团队协作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wr9s777w-1605520247038)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111142738516.png)]
Git 命令行操作
本地库初始化
命令:git init
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kGKJN3wh-1605520247039)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111144012217.png)]
初始化操作会在当前路径下创建一个本地库(.git文件),它是隐藏的,要通过ls -lA来查看。
注意:本地库一定要设置签名,不然会出错。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v016tEUs-1605520247040)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111144123396.png)]
本地库的目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xyAKD9uO-1605520247043)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111144144013.png)]
设置签名
形式:
用户名:tom
Email 地址:goodMorning@atguigu.com
作用:
区分不同开发人员的身份
辨析:
这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
命令(两种常景) :
项目级别/仓库级别:仅在当前本地库范围内有效
git config user.name tom_pro
git config user.emailgoodMorning_pro@atguigu.com
信息保存位置:git里面的config 文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VpG9Ara-1605520247044)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111145609557.png)]
系统用户级别:登录当前操作系统的用户范围
git config --global user.name tom_glb
git config --global user.email goodMorning_pro@atguigu.com
信息保存位置:~/.gitconfig 文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uVUgPBSc-1605520247048)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111150121755.png)]
级别优先级
- 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名
- 如果只有系统用户级别的签名,就以系统用户级别的签名为准
- 二者都没有不允许
基本操作
状态查看
git status:查看工作区、暂存区状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cBpExcZ0-1605520247049)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111150602619.png)]
添加
git add[filename]:将工作区的“新建/修改”添加到暂存区
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AjM9Fvpr-1605520247050)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111150901775.png)]
提交
将暂存区的内容提交到本地库
git commit -m “commit message” [filename]
commit messages是提交的日志
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ranu1LY-1605520247053)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111151420776.png)]
查看历史记录(4种)
多屏显示控制方式: 空格向下翻页 b向上翻页 q退出
- git log
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zsx9quxO-1605520247056)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111152122540.png)]
- git log --pretty = oneline
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c3SP0r58-1605520247057)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111152248861.png)]
- git log --oneline
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-btL7vfET-1605520247059)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111153000458.png)]
- git reflog
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFc67afE-1605520247060)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111153022276.png)]
HEAD@{移动到当前版本需要多少步}
前进后退(3种)
本质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nra26COz-1605520247062)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111153121078.png)]
基于索引值操作[推荐]
git reset–hard[局部索引值]
git reset–hard a6ace91
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-skHn28FC-1605520247064)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111153546270.png)]
使用^符号:只能后退
git reset–hard HEAD^
注:一个^表示后退一步,n个表示后退n步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J9wmRgTs-1605520247066)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111153735821.png)]
使用~符号:只能后退
git reset --hard HEAD~n
注:表示后退 n 步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n2hbJnU5-1605520247068)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111153735821.png)]
reset 命令的三个参数对比
–soft 参数
仅仅在本地库移动 HEAD 指针
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-raHPdrZz-1605520247071)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111154804178.png)]
–mixed 参数
在本地库移动 HEAD 指针
重置暂存区
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlHBNuIv-1605520247073)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111154836745.png)]
–hard 参数
在本地库移动 HEAD 指针
重置暂存区并重置工作区
删除文件并找回
前提:删除前,文件存在时的状态提交到了本地库。
操作:git reset–hard[指针位置]
删除操作已经提交到本地库:指针位置指向历史记录(不演示了)
删除操作尚未提交到本地库:指针位置使用 HEAD
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tog7dpaO-1605520247075)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111160554364.png)]
比较文件差异(3种)
git diff[文件名]
将工作区中的文件和暂存区进行比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V4mjxHS2-1605520247076)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111161648811.png)]
gitdiff[本地库中历史版本] [文件名]
将工作区中的文件和本地库历史记录比较
不带文件名比较多个文件
分支管理
什么是分支?
在版本控制过程中,使用多条线同时推进多个任务。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XO1HnpiA-1605520247078)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111162959365.png)]
分支的好处?
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任 何影响。失败的分支删除重新开始即可。
分支操作
创建分支
git branch[分支名]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XUDbkI6M-1605520247078)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116143928054.png)]
查看分支
git branch -v
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CVO9hLnE-1605520247080)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116143954526.png)]
切换分支
git checkout[分支名]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LYMufhav-1605520247081)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116144211521.png)]
合并分支
第一步:切换到接受修改的分支(被合并,增加新内容)上 git checkout[被合并分支名]
第二步:执行 merge 命令 git merge[有新内容分支名]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f39Ba3hK-1605520247083)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116144505662.png)]
解决冲突
冲突的表现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dj8ZEFv7-1605520247084)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111163526833.png)]
冲突的解决
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add[文件名]
第四步:git commit-m"日志信息"
注意:此时 commit 一定不能带具体文件名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WymrWsaF-1605520247086)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116161741218.png)]
Git 基本原理
哈希
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDOPJHlk-1605520247087)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116162138802.png)]
哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下 几个共同点:
①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
②哈希算法确定,输入数据确定,输出数据能够保证不变
③哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
④哈希算法不可逆 Git 底层采用的是 SHA-1 算法。 哈希算法可以被用来验证文件。原理如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n73QTjg8-1605520247089)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116162231401.png)]
Git 就是靠这种机制来从根本上保证数据完整性的。
保存版本的机制
集中式版本控制工具的文件管理机制
以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本 文件和每个文件随时间逐步累积的差异。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yq5XHvHP-1605520247090)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116162345329.png)]
Git 的文件管理机制
Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前 的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的 工作方式可以称之为快照流。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D4Ya1Pra-1605520247091)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116162457267.png)]
Git 文件管理机制细节
Git 的“提交对象”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHhZswDB-1605520247093)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116162626619.png)]
提交对象及其父对象形成的链条
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMPft0TG-1605520247095)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116162640700.png)]
Git分支管理机制
分支的创建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBmi8Ijt-1605520247097)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116162914613.png)]
分支的切换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8TLxxNW-1605520247098)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116162929166.png)]
GitHup
注册
[gitHup首页就是注册地址][https://github.com/ ]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cj6U3uTj-1605520247100)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116165226228.png)]
创建远程库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dp7MQcUm-1605520247102)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116170645943.png)]
创建远程库地址别名
先到你创建的远程库复制地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQWdRvpn-1605520247103)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116170740046.png)]
然后git Bash进行添加(git add [别名] [地址])
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQ2rXBQ5-1605520247104)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116170819153.png)]
推送到远程库
git push [别名] [分支名]
进行此操作需要先登录哦
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0BaQFro-1605520247105)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116171048621.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzeZmTiD-1605520247106)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116171129797.png)]
克隆
git origin[远程地址]
使用后效果
- 完整的把远程库下载到本地
- 创建 origin 远程地址别名
- 初始化本地库
团队成员邀请
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VwMIm17f-1605520247108)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116171457733.png)]
邀请后,受邀用户可以登录githup然后访问邀请链接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yBQchiFy-1605520247112)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116172010348.png)]
拉取
pull=fetch+merge
git fetch[远程库地址别名] [远程分支名]
git merge[远程库地址别名/远程分支名]
git pull[远程库地址别名] [远程分支名]
pull和fetch+merge区别
git在本地会保存两个版本的仓库,分为本地仓库和远程仓库。
本地仓库就是我们平时 add、commit 的那个仓库。
远程仓库可以用git remote -v查看(这里的远程仓库是保存在本地的远程仓库,等同于另一个版本,不是远程的远程仓库)。
fetch 只能更新远程仓库的代码为最新的,本地仓库的代码还未被更新,我们需要通过 git merge origin/master 来合并这两个版本,你可以把它理解为合并分支一样的。
pull 操作是将本地仓库和远程仓库(本地的)更新到远程的最新版本。
如果想要更加可控一点的话推荐使用fetch + merge。
解决冲突
要点
如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取。
拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
跨团队协作
(暂无需求,先放着)
SSH 登录(设置了以后就不用登录)
- 进入当前用户的家目录: cd ~
- 删除.ssh 目录:rm -rvf .ssh
- ssh-keygen -t rsa -C 1186421205@qq.com [注意:这里-C 这个参数是大写的 C]
- 进入.ssh 目录查看文件列表 cd .ssh和ls -lF
- 查看 id_rsa.pub 文件内容 cat id_rsa.pub
- 复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSHandGPG keys—>NewSSHKey
- 输入复制的密钥信息
- 回到 Gitbash 创建远程地址别名 【git remote add origin_ssh +ssh地址】
- 推送文件进行测试
Eclipse 操作
工程初始化为本地库
工程→右键→Team→ShareProject→Git->
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MsaReR3j-1605520247114)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201116173702985.png)]
Eclipse中忽略文件
概念:Eclipse 特定文件
这些都是 Eclipse 为了管理我们创建的工程而维护的文件,和开发的代码没有 直接关系。最好不要在 Git 中进行追踪,也就是把它们忽略。
.classpath 文件
.project 文件
.settings 目录下所有文件
为什么要忽略 Eclipse 特定文件呢?
同一个团队中很难保证大家使用相同的 IDE 工具,而 IDE 工具不同时,相关工 程特定文件就有可能不同。如果这些文件加入版本控制,那么开发时很可能需要为 了这些文件解决冲突。
GitHub 官网忽略样例文件
https://github.com/github/gitignore/blob/master/Java.gitignore
https://github.com/github/gitignore
在~/.gitconfig 文件中引入上述文件
然后需要进行配置
[core] excludesfile=C:/Users/Lenovo/Java.gitignore
[注意:这里路径中一定要使用“/”,不能使用“\”]
→Team→ShareProject→Git->
[外链图片转存中…(img-MsaReR3j-1605520247114)]
Eclipse中忽略文件
概念:Eclipse 特定文件
这些都是 Eclipse 为了管理我们创建的工程而维护的文件,和开发的代码没有 直接关系。最好不要在 Git 中进行追踪,也就是把它们忽略。
.classpath 文件
.project 文件
.settings 目录下所有文件
为什么要忽略 Eclipse 特定文件呢?
同一个团队中很难保证大家使用相同的 IDE 工具,而 IDE 工具不同时,相关工 程特定文件就有可能不同。如果这些文件加入版本控制,那么开发时很可能需要为 了这些文件解决冲突。
GitHub 官网忽略样例文件
https://github.com/github/gitignore/blob/master/Java.gitignore
https://github.com/github/gitignore
在~/.gitconfig 文件中引入上述文件
然后需要进行配置
[core] excludesfile=C:/Users/Lenovo/Java.gitignore
[注意:这里路径中一定要使用“/”,不能使用“\”]
其它操作待补充
参考链接
http://www.atguigu.com/