Git&GitHub&Gitee

来源:尚硅谷:https://www.bilibili.com/video/BV1pW411A7a5?p=54

Git简介原理以及命令

一.什么是版本控制工具

协同修改:多人并行不悖的修改服务器端的同一个文件。
数据备份:不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理: 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方    面 SVN 采用的是增量式管理
的方式,而 Git 采取了文 件系统快照的方式。
权限控制 :
   对团队中参与开发的人员进行权限控制。 
   对团队外开发者贡献的代码进行审核——Git 独有。 
历史记录: 
   查看修改人、修改时间、修改内容、日志信息。 
   将本地文件恢复到某一个历史状态。 
分支管理 
   允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

二.Git的优势:

1.大部分操作在本地完成,不需要联网 完整性保证
2.尽可能添加数据而不是删除或修改数据分支操作非常快捷流畅
3.与 Linux 命令全面兼容

三.Git的安装

Git&GitHub&Gitee_第1张图片
Git&GitHub&Gitee_第2张图片
Git&GitHub&Gitee_第3张图片
Git&GitHub&Gitee_第4张图片
Git&GitHub&Gitee_第5张图片
Git&GitHub&Gitee_第6张图片
Git&GitHub&Gitee_第7张图片
Git&GitHub&Gitee_第8张图片
到这里安装完成,个人觉得两个都不用点

四.Git几个重要的结构介绍

1.Git结构:
Git&GitHub&Gitee_第9张图片
2.Git 和代码托管中心: 维护远程库

局域网环境下:Gitlab服务器
外网:GitHub,Gitee(码云)

3.本地库和远程库:

团队内部协作
Git&GitHub&Gitee_第10张图片
跨团队协作
Git&GitHub&Gitee_第11张图片
总结:Git主要有三部分组成,分别是工作区暂存区以及本地库,工作区也就是我们开发的代码之类的,通过git add加到暂存区中暂时存储,然后通过git commit提交到本地库,最后将本地库中的代码push到远程库,或者pull远程库的代码

五.Git 命令行操作

1.本地库初始化:git init初始化后才能找到下图的内容
Git&GitHub&Gitee_第12张图片
2.设置签名:区分不同开发人员的身份,这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系

项目级别/仓库级别,仅在当前本地库范围内有效:

git config user.name tom_pro 
git config user.email 15645584@qq.com

信息保存位置:./.git/config 文件
Git&GitHub&Gitee_第13张图片
系统用户级别,登录当前操作系统的用户范围:

git config --global user.name tom_glb 
git config --global 15645584@qq.com

信息保存位置:~/.gitconfig 文件
Git&GitHub&Gitee_第14张图片
级别优先级

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

3.基本操作

状态查看git status 查看工作区、暂存区状态
添加git add [file name] 将工作区的“新建/修改”添加到暂存区
提交git commit -m "commit message" [file name] 将暂存区的内容提交到本地库
查看历史记录git log
Git&GitHub&Gitee_第15张图片
Git&GitHub&Gitee_第16张图片
前进后退

基于索引值操作[推荐]1.git reset --hard [局部索引值]  
  2.git reset --hard a6ace91 
使用^符号:只能后退 
  git reset --hard HEAD^ 注:一个^表示后退一步,n 个表示后退 n 步
使用~符号:只能后退
  git reset --hard HEAD~n 注:表示后退 n 步

Git&GitHub&Gitee_第17张图片
reset 命令的三个参数对比
1.soft 参数:仅仅在本地库移动 HEAD 指针
Git&GitHub&Gitee_第18张图片
2.mixed 参数:在本地库移动 HEAD 指针,重置暂存区
Git&GitHub&Gitee_第19张图片3.hard 参数:在本地库移动 HEAD 指针,重置暂存区,重置工作区

删除文件并找回:删除前,文件存在时的状态提交到了本地库。
操作:git reset --hard [指针位置]

删除操作已经提交到本地库:指针位置指向历史记录 
删除操作尚未提交到本地库:指针位置使用 HEAD

比较文件差异

git diff [文件名] :将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本] [文件名] :将工作区中的文件和本地库历史记录比较 
不带文件名比较多个文件

4.分支管理

分支:在版本控制过程中,使用多条线同时推进多个任务。
Git&GitHub&Gitee_第20张图片
分支的好处:同时并行推进多个功能开发,提高开发效率,各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支操作:

创建分支:git branch [分支名]
查看分支:git branch -v
切换分支:git checkout [分支名]
合并分支: 
  1.切换到接受修改的分支(被合并,增加新内容)上 git checkout [被合并分支名]
  2.执行 merge 命令 git merge [有新内容分支名]

解决冲突:
Git&GitHub&Gitee_第21张图片

六.Git 基本原理(只是想使用可以不看)

哈希:
在这里插入图片描述

哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下 几个共同点: 
	①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
	②哈希算法确定,输入数据确定,输出数据能够保证不变 
	③哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
	④哈希算法不可逆 Git 底层采用的是 SHA-1 算法。 

哈希算法可以被用来验证文件。原理如下图所示:
Git&GitHub&Gitee_第22张图片
Git 保存版本的机制
1.集中式版本控制工具的文件管理机制:以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本 文件和每个文件随时间逐步累积的差异。
Git&GitHub&Gitee_第23张图片
2.Git 的文件管理机制:Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前 的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的 工作方式可以称之为快照流。
Git&GitHub&Gitee_第24张图片
3.Git 文件管理机制细节
Git&GitHub&Gitee_第25张图片
Git 分支管理机制
Git&GitHub&Gitee_第26张图片
Git&GitHub&Gitee_第27张图片
Git&GitHub&Gitee_第28张图片
Git&GitHub&Gitee_第29张图片
总结:创建了一个分支后,通过HEAD来切换指向,达到分支的目的,基于老版本衍生出支线

七.GitHub结合Git命令的使用

创建一个仓库
Git&GitHub&Gitee_第30张图片
Git&GitHub&Gitee_第31张图片
创建远程库地址别名:

git remote -v 查看当前所有远程地址别名
git remote add [别名] [远程地址]
Git&GitHub&Gitee_第32张图片
推送:git push [别名] [分支名]
Git&GitHub&Gitee_第33张图片
克隆:git origin [远程地址]
Git&GitHub&Gitee_第34张图片
效果 :完整的把远程库下载到本地,创建 origin 远程地址别名,初始化本地库

团队成员邀请
Git&GitHub&Gitee_第35张图片
Git&GitHub&Gitee_第36张图片
1.拉取

pull=fetch+merge 
git fetch [远程库地址别名] [远程分支名] 
git merge [远程库地址别名/远程分支名]
git pull [远程库地址别名] [远程分支名]

2.解决冲突:如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取。拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。

跨团队协作
Git&GitHub&Gitee_第37张图片
Git&GitHub&Gitee_第38张图片
Git&GitHub&Gitee_第39张图片
Git&GitHub&Gitee_第40张图片
审核代码
Git&GitHub&Gitee_第41张图片

合并代码
Git&GitHub&Gitee_第42张图片
Git&GitHub&Gitee_第43张图片

八.ssh免密登录

1.进入当前用户的家目录:$ cd ~ 
2.删除.ssh 目录:$ rm -rvf .ssh 
3.运行命令生成.ssh 密钥目录:$ ssh-keygen -t rsa -C atguigu2018ybuq@aliyun.com [注意:这里-C 4.这个参数是大写的 C] 
5.进入.ssh 目录查看文件列表:$ cd .ssh
6.查看 id_rsa.pub 文件内容:$ cat id_rsa.pub
7.复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys 
8.New SSH Key 
9.输入复制的密钥信息 
10.回到 Git bash 创建远程地址别名:git remote add 11origin_sshgit@github.com:atguigu2018ybuq/huashan.git 
12.推送文件进行测试
gitee类试

九.Git工作流

十.Gitlab服务器搭建过程

Git实战 -- idea中如何使用

十一.idea中使用Git

1.安装git,gitee插件
Git&GitHub&Gitee_第44张图片
Git&GitHub&Gitee_第45张图片
2.配置Git
Git&GitHub&Gitee_第46张图片
3.配置gitee或者GitHub账户
gitee使用token登录:token在gitee中要重新生成
Git&GitHub&Gitee_第47张图片
Git&GitHub&Gitee_第48张图片
4.常用的几个操作

初始化
Git&GitHub&Gitee_第49张图片
忽略的文件:show in Explorer --> 找到.git/info下的exclude文件,加入忽略的文件

# **/是指当前目录及子目录只要包含就忽略
**/mvnw
**/mvnw.cmd
**/.mvn
**/target/
.idea
**/.gitignore
**/db/
target
*.ipr
*.iws

添加到缓存区
右键项目→Git→Add,完成后,文件名会变绿

提交到本地库
右键项目→Git→Commit Directory
或者点击工具栏按钮,完成后,文件名会变回默认的颜色
Git&GitHub&Gitee_第50张图片
Git&GitHub&Gitee_第51张图片
版本切换

1.查看提交到本地库的历史记录
在这里插入图片描述
Git&GitHub&Gitee_第52张图片
2.上一步拿到历史记录后可以看到如下图
Git&GitHub&Gitee_第53张图片
3.右键→Copy Revision NumberGit&GitHub&Gitee_第54张图片
4.在模块上右键
Git&GitHub&Gitee_第55张图片
5.选择 Hard 并粘贴版本号
Git&GitHub&Gitee_第56张图片
创建分支

1.右击项目 -> Git -> Repository -> Branches -> New Branches
Git&GitHub&Gitee_第57张图片
2.新建一个hellogit.txt,然后重新提交,可以看到如下图:
在这里插入图片描述
合并分支
1.在模块上右键切换到主干
Git&GitHub&Gitee_第58张图片
2.在模块上右键选择合并改变
Git&GitHub&Gitee_第59张图片
3.选择要合并的分支
Git&GitHub&Gitee_第60张图片
在这里插入图片描述
解决冲突
1.master和cloud分支分别修改hello.txt文件,并且add,commit,结果如下图
在这里插入图片描述
2.在主干合并分支内容,出现冲突:Git→Resolve Conflicts打开(不知道为什么不弹出来)

上传本地库到远程仓库
1.在gitee上创建一个仓库,复制地址
2.idea上直接push我们的项目
Git&GitHub&Gitee_第61张图片
3.如果远程仓库没有更新那么可以直接提交,如果更新过并且我们也更新了,那么会出现冲突,以下是合并冲突
Git&GitHub&Gitee_第62张图片
4.最后发现本次没有push成功,只是合并了,我们在把合并后的提交就可以

Git&GitHub&Gitee_第63张图片
克隆项目:创建一个文档,进入bin bash -> git clone +项目地址

问题:在远程仓库创建了一个仓库,我要push本地项目上去,会报一个错

拒绝推送,原因是新建的仓库中默认有我们没有的东西,相当于有更新,会拒绝我们push
在这里插入图片描述
解决
本地项目强制推送:git push -u origin master -f
解释
不清楚原因,新建一个仓库,往上面push或者pull都失败,我觉得可能是新建的仓库与提交的项目有冲突(不清楚欢迎留言),由于是新建的项目,就直接强制push或者pull,后面操作就ok。

你可能感兴趣的:(框架篇,git)