前言
- 本篇博客内容来源于尚硅谷的尚硅谷Git入门到精通全套教程(涵盖GitHub\Gitee码云\GitLab)_哔哩哔哩_bilibili
- 作者对视频内容进行了整合,由于记笔记时图片使用的是本地路径,所以导致博客的图片无法正常显示,如果有图片需求可以下载上方的pdf
- 视频课程名叫尚硅谷Git入门到精通全套教程,但感觉是带着了解了一些git相关概念,“精通”这个词有点夸张了哈,不过视频才四个小时,可以花一两天看一下
- 作者平时都用使用idea工具集成gitHub,写项目时每完成一个业务就上传一次项目,出错时还可以用历史版本来对比
基础概念
-
版本控制
-
版本
-
软件版本
-
文件版本:用于区分同一份文件的不同版本,保存重要的历史记录以便于恢复数据
-
-
基础功能
-
保存和管理文件(管理体现在自动生成文件版本号)
-
提供客户端工具用于访问文件(提高访问的安全性)
-
提供不同版本文件的比对功能(无法对图片、word文档、压缩包进行比对,本质上是对代码、文本文件进行比对)
-
-
-
集中式版本控制
.
-
缺点
-
文件冲突问题(不同用户同时对同一份文件进行修改的时候,最终上传到服务器的文件会覆盖之前所有的修改)
-
不同的软件针对该问题有不同的解决方式
-
VSS:会给文件加一个锁,仅有一个用户能修改,其它用户只能查看,轮到其它用户修改的时候,文件中的内容为上一个用户修改后的结果(不利于多人协作开发)
-
CVS,SVN:会提供一个约束,对文件中每一行进行比对(如果不同用户修改的行不同,那修改结果都会保留,但是操作同一行还是会出现文件冲突)
-
-
-
中央服务器故障之后,所有用户都无法操作
-
-
-
分布式版本控制
.
-
优点
-
有个本地仓库,存放内容和中央服务器完全一致,中央服务器出现故障,用户依旧可以对本地文件进行操作,等到中央服务器恢复运行时,会和本地仓库进行同步
-
同时用户对文件的操作是和本地仓库进行交互,不受网络影响
-
-
缺点:同步速度会收网络限制
-
git就是分布式版本控制软件
-
-
多人协作开发
GITHUB DeskTop的基本使用
-
将中央服务器下载到本地仓库的过程叫做clone
-
创建一个本地仓库
-
readme文件用于描述整个仓库
==》
-
页面架构
-
显示文件操作的状态
-
上面三个状态分别代表删除、修改、添加
-
-
提交本地文件到仓库
-
切换/操作本地仓库
-
删除本地仓库
==》
-
不勾选表示在软件中移除该本地仓库,但是系统中的该本地仓库的资源还保留
-
将该仓库拖拽到软件中,可以重新添加该仓库
-
-
勾选表示在系统中移除本地仓库,误删除可以在系统的回收站中恢复
-
-
文件的基本操作
-
在仓库路径中创建文件可以被客户端动态识别(因为客户端有比对功能)
==》
-
因为原先本地仓库中没有test_create.md文件,根据客户端的比对,会将该改动显示在状态栏中
-
在仓库路径创建文件不代表将文件存放到本地仓库,因为本地仓库是自己管理和操作文件的(对应.git目录)
-
.
-
提交文件(提交到本地仓库中,本地文件和仓库文件的内容一致,所以状态栏无内容)
==》
-
修改文件(git中没有修改操作只有提交操作,因为每次修改都认为是该文件的新的版本)
==》
==》
==》
-
通过历史记录查看版本号
.
-
git中的版本号是才有40个16进制数组成的
-
由于版本号是每次提交时产生的,又称为提交码
-
在本地仓库的objects目录中可以通过版本号找到具体文件
-
-
删除文件(在本地文件中删除之后,提交到仓库中进行更新,此时仓库中的文件也会被删除)
==》
==》
==》
!!!分支功能
原理
.
-
定义:多人协作时,不同分支可以指向不同的提交信息,最后可以合并成一次提交(详情请看搜索本篇文章的版本号--》分支操作)
-
优点:可以解决多个用户对同一个版本库进行操作而导致的频繁的文件冲突,只在合并的时候对版本库进行一次文件冲突处理即可
操作(不同文件)
-
创建一个版本库用于测试分支功能,主分支名称可以修改
-
创建不同副本(分支)
==》
-
√表示当前操作的分支
-
-
向user分支添加user文件
-
切换到order分支
,再向order分支添加order文件
-
发现没有user文件,因为不同分支操作的是不同版本库
-
-
合并分支:在主分支中点击
,选择要合并的分支
-
查看合并结果
操作(相同文件)
-
在user分支中创建common文件,并添加user内容
-
在order分支中也创建common文件,添加order内容
-
分别将user、order分支和主分支合并,发现出现了文件冲突
-
查看冲突的文件内容
-
head部分表示当前文件版本的内容,=====下方的是冲突的文件的内容
-
-
进行人工处理
==》
标签
-
给提交/合并操作添加标签,使操作更加清晰
-
操作
-
添加标签
==》
-
删除标签
-
github远程仓库
仓库相关操作
-
在github创建远程仓库
.
-
删除仓库
==》
==输入验证信息,防止误删除==》
文件相关操作
-
添加文件
==创建文件==》
-
创建新文件
-
上传文件
-
-
修改文件
==》
==》
-
查看文件修改的历史记录
分支相关操作
-
添加新分支
==》
==》
-
切换分支
下载操作
-
将远程仓库下载到本地
-
在客户端中
-
登录github账号
-
关联账号
-
下载远程仓库到本地
-
这里我的仓库列表一直没有刷新出来,我就用url的方式进行克隆了
-
使用gitee托管平台也需要用url的方式进行克隆
-
-
修改本地文件,提交到本地仓库
.
-
上传到远程仓库(这里需要git邮箱与远程仓库的邮箱一致)
==》
-
其它知识
readme、ignore、修改信息
-
readme文件用于描述仓库信息
-
ignore(忽略):不用提交到仓库的文件进行忽略,修改这些文件时就不会被客户端识别(即不会进行比对)
-
在创建仓库时指定忽略
-
在修改状态栏中对该后缀名的文件进行忽略
-
-
比对功能的修改信息
-
-1,3:旧文件一到三行有内容
-
+1,5:新文件一到五行有内容
-
!!!版本号
-
通过SHA-1算法生成的40位16进制数,可用于定位仓库文件【2(文件夹) + 38(文件名) 位】
-
通过版本号查看文件的提交信息
-
在仓库路径中使用git bash工具
-
输入
git cat-file -p 版本号
-
tree后面跟着的也是版本号,查询该版本号结果为
-
其中有文件的版本号,可以通过它查询到文件中的内容
-
-
parent是上一次提交的版本号
-
-
文件操作
-
增加文件后版本号变化(红色为新增的文件)
.
-
修改文件后版本号的变化(蓝色为修改后的文件)
.
-
删除文件受版本号的变化(紫色为删除文件的操作)
-
删除文件本质上是删除指向文件的指针,而文件在物理上并没有被删除
-
.
-
文件添加对应的区域和命令
.
分支操作
-
head文件指向当前所在的分支文件(切换分支会切换head的指向)
-
分支文件存放了最新一次提交的版本号
-
不同分支可以存放相同的提交版本号
-
-
-
通过head切换不同的指向实现逻辑上的分支
.
!!!idea集成代码托管平台
集成github
添加文件
==填写仓库信息==》
==添加账户==》
==上传项目==》
修改文件(右键修改的文件)
提交到本地仓库
==上传到服务器==》
本地数据与远程仓库进行同步
远程修改信息
==idea中进行同步==》
==同步完成==》
下载远程仓库内容
==》
!!!解决idea上传文件报错
-
报错信息:SSL certificate problem: unable to get local issuer certificate
-
使用git bash命令行,查看配置信息
vim ~/.gitconfig
-
修改配置文件
-
集成gitee
-
下载gitee插件
==》
-
后续操作和集成github基本一致
git命令
.
仓库操作
-
git init:在当前路径创建仓库
-
客户端工具创建仓库会做默认的初始化提交
-
使用命令行创建仓库没有任何提交仓库,所以一开始是没有main/master主分支文件的
-
-
git clone 远程仓库的url:克隆远程仓库到当前路径
-
git clone 远程仓库的url 指定名称:克隆远程仓库并指定保存到本地的名称
-
-
git config 属性名 属性值:配置当前所在路径的仓库相关信息
.
-
也可以修改.git文件夹中的config文件
-
git config --global 属性名 属性值:添加全局配置(全局配置信息会保存在c盘下的.gitconfig文件)
-
文件操作
-
支持通配符*
-
git status:查看git暂存区的状态
-
untracked(未跟踪):在仓库路径中创建文件但是没有上传到本地仓库
-
modified:修改
-
deleted:删除
-
-
git add 文件名:将文件从工作区放到暂存区,untracked状态消失
-
git rm --catched 文件名:将文件从暂存区放回到工作区(只是逻辑上的移动),恢复untracked状态
-
git commit -m 提交信息:提交
-
git log [--oneline]:显示提交信息
-
oneline:只显示部分提交信息
-
-
防止误删除
-
git restore 文件名:从存储区获取文件放到工作区
-
前提是删除操作没有提交,否则会报错
-
-
git reset --hard 版本号:将当前仓库重置到某次提交,缺点是会丢失该提交之后的提交信息
-
git revert 版本号:还原到指定版本号之前,不会丢失提交信息(实际上是重做上一步的操作)
-
分支操作
-
git中的分支是基于提交操作的,使用命令创建的仓库一开始是没有主分支的,想要创建分支得先提交一个文件
-
git branch 分支名:创建分支
-
git branch -v:查看分支信息,*表示当前操作的分支
-
git checkout [-b] 分支名:切换分支
-
-b:创建并切换分支
-
-
git merge 分支名:将指定分支合并到当前分支
-
如果有文件冲突会有提示信息,
此时就需要人工干预
-
标签操作
-
git tag 标签名 版本号:给提交信息打标签,之后就可以通过标签名访问相应的提交
-
git log 版本号/标签名:查看某次提交信息
-
git tag -d 标签名:删除标签
远程仓库
-
git remote add 远程仓库的本地别名 远程仓库地址:导入远程仓库到本地
-
git remote remove 远程仓库的本地别名 :删除远程导入的本地仓库
-
git push 远程仓库的本地别名:提交到远程仓库
-
git pull 远程仓库的本地别名:本地同步远程仓库信息
-
开启安全认证功能(如果提交是ssh对应的地址,则需要配置该功能)
-
ssh -keygen -t rsa -C远程仓库地址:会生成一个ssh公钥,保存到c盘用户目录下的ssh目录中的id.rsa.pub文件中
-
然后复制其中的密钥,到对应的代码托管平台中进行ssh公钥的设置
-
搭建代码托管平台
-
安装gitlab(gitlab需要安装到虚拟机)
-
密码初始是随机生成的,放在/etc/gitlab/initial_root_password下
-
idea集成gitlab也是需要安装插件