Git&GitHub快速入门

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的优势
  1. 大部分操作在本地完成,不需要联网
  2. 完整性保证
  3. 尽可能添加数据而不是删除或修改数据
  4. 分支操作非常快捷流畅
  5. 与 Linux 命令全面兼容
Git安装步骤

开始安装的界面

img

安装路径

img

选择安装组件–推荐全选哟!

img

菜单文件夹–没什么要讲的 默认!

img

修改系统的环境变量—建议选择上面两个(我是第一个)

img

SSL的证书的选择

img

配置行尾结束符(默认)

img

行尾结束符介绍

img

Unix-style和Windows:简单说:windows<回车换行> (carriage return AND line feed)使用:“\n\r” 换行;Unix<换行> (carriage return)下使用:“\n”;各个系统换行问题:

配置终端仿真

img

其他的配置–默认即可

img

使用

在任意地方,右键GitBash Here就可以啦

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-odkDxqWI-1605520247028)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111142407687.png)]

使用过程问题解决会汇总

如果中文没有正常显示,请求鼠标右击选择“option"选项,更换语言即可。

img

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)]

级别优先级

  1. 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名
  2. 如果只有系统用户级别的签名,就以系统用户级别的签名为准
  3. 二者都没有不允许

基本操作
状态查看

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退出

  1. git log

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zsx9quxO-1605520247056)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111152122540.png)]

  1. git log --pretty = oneline

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c3SP0r58-1605520247057)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111152248861.png)]

  1. git log --oneline

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-btL7vfET-1605520247059)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201111153000458.png)]

  1. 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[远程地址]

使用后效果

  1. 完整的把远程库下载到本地
  2. 创建 origin 远程地址别名
  3. 初始化本地库
团队成员邀请

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 登录(设置了以后就不用登录)
  1. 进入当前用户的家目录: cd ~
  2. 删除.ssh 目录:rm -rvf .ssh
  3. ssh-keygen -t rsa -C 1186421205@qq.com [注意:这里-C 这个参数是大写的 C]
  4. 进入.ssh 目录查看文件列表 cd .ssh和ls -lF
  5. 查看 id_rsa.pub 文件内容 cat id_rsa.pub
  6. 复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSHandGPG keys—>NewSSHKey
  7. 输入复制的密钥信息
  8. 回到 Gitbash 创建远程地址别名 【git remote add origin_ssh +ssh地址】
  9. 推送文件进行测试

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/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值