Git、Github、Gitee、GitLab学习笔记

Git、Github、Gitee、GitLab学习笔记

前言

  本文主要是介绍Git、Github、Gitee和GitLab这四者,以及前三者的基本使用,并且还还有IDEA搭配前三者的使用,手把手教你如何在IDEA中使用前三者。
学习建议:

  • 建议平时多逛Gitee和Github,同时多使用Git将自己的代码提交到Gitee或Github上,以此熟悉Git常用命令的使用
  • 建议在学完Linux后再学Git,毕竟Git就是为Linux而生的
    如果觉得本文对你有所帮助,欢迎点赞👍、收藏⭐,如果文章有个别错别字、或表示不当、或错误,恳请评论✍指出,在下不胜感激

一、Git

查看源图像

1、Git概述

  • Git是什么

    Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理本质是一个系统软件

    是[Linus Torvalds](https://baike.baidu.com/item/Linus Torvalds/9336769)为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件,用来替代BitKeeper的(PS:因为开发BitKeeper的公司要收费,Linus Torvalds觉得你 ™ 一个这么"简单"的东西居然™还好意思要收费,于是就花两周研发出了Git,这场景有点像他当初想研究Unix的原理,但是Unix要收费,于是他自己就研发了Linux,O(∩_∩)O这就是大佬吧!”你不给老子用,老子就自己开发一个出来“😆真强!同时Git是如今世界上最好用的分布式版本控制系统)。

    在学习Git前让我们一起来拜一拜🙇‍🙇‍祖师爷吧~ o( ̄▽ ̄)ブ(老爷子👴还健在ヾ(•ω•`)o)

    image-20220714162634808
    祖师爷的图片挂了(CSDN居然连祖师爷的图片都不让展示w(゚Д゚)w),所以在下只能提供链接供大家参拜😆
    👉:Git祖师爷

  • 什么是版本控制

    版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术

    其主要作用是:方便查看(或回退到)历史版本,方便多人协作,提高开发效率

    版本控制主要有本地式版本控制集中式版本控制分布式版本控制

    • 本地式版本控制

      所有的版本数据存储在本地1。记录文件每次的更新,可以对每个版本做一个快照2,或是记录补丁文件,使用于个人,相代表产品:RCS……

    • 集中式版本控制

      所有的版本数据都存在服务器上。用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS……

    • 分布式版本控制

      所有版本数据全都会同步到每个用户的电脑上。这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。代表产品:Git、Mercurial、Darcs……

  • Git的优点

    • 速度快
    • 灵活
    • 分布式设计
    • 支持离线工作

    了解了这么多Git的优点,我们也有必要了解Git一个主要的缺点,那就是存在安全隐患。Git是分布式版本控制,所有版本信息都会同步到每个用户的电脑上,如果在公司中使用Git,很容易就将系统的重要信息给泄露出去。

  • Git有什么用

    • 可以实现软件的版本控制,在多个版本之间切换;
    • 可以实现多分支开发,提高开发效率;
    • 可以实现历史记录,历史状态的恢复;
    • 团队内部实现权限管理
  • 为什么要学习Git

    因为去公司上班肯定是要一群人一起开发东西,这就需要共同协作,不可能一个公司就你一个人吧?其次就是使用git能很迅速地将远程仓库(比如:GitHub、Gitee)中的项目进行克隆到本地,是一个是非好用的工具,就比如有打火机不用还去钻木取火?

  • 学习站点

2、Git基本操作介绍

2.1 安装&卸载
  • 方式一:直接去官网下载 Git官网

    步骤如下

    image-20220826110627550image-20220826110920430

    image-20220826110929673
  • 方式二:镜像下载(推荐) 🚪传送门

    官网下载速度优点慢,主要原因有以下几点:

    1. Git服务器在国外,距离我们较远。学过计算机网络的都知道,访问一个站点,需要路由转发,距离越远所消耗的时间越长
    2. 国内存在网络防火墙,无法直接访问外网,需要翻墙

    步骤如下

    image-20220826112257670 image-20220826112339093

下载后就可以直接进行安装,无脑下一步即可!安装完毕就可以使用了!

Git卸载步骤 删除 G i t 的环境变量 → 卸载即可 删除Git的环境变量\rightarrow{卸载即可} 删除Git的环境变量卸载即可

2.2 启动

安装成功后在开始菜单中会有Git项:

image-20220826114330719

  • **Git Bash:**Unix与Linux风格的命令行(推荐)

  • **Git CMD:**Windows风格的命令行

  • Git GUI:图形界面操作Git(不推荐)

任意文件夹下右键都可以看到对应的Git菜单:

image-20220826114942780

打开后就可以通过直接敲指令来使用Git了O(∩_∩)O

由于Git和Linux同出一脉,他们的创造者都是Linus,并且Git本来就是Linus创建出来为了服务Linux的,所以可以直接在Git Bash窗口使用Linux的指令,常用Linux指令请参考:Linux常用指令大全(分类明确,用法介绍详细)

image-20220826115118466

3、Git的基本使用

image-20220826235829448

3.1 GIt指令大全

推荐阅读:Git索引 | 猴子都能懂的GIT入门

温馨提示

  1. 如果大家觉得这些命令太多,可以只记带星号*****的(●ˇ∀ˇ●),其他命令等需要用到的时候,

    再从收藏夹里找出来看,欢迎收藏( •̀ ω •́ )✧

  2. 如果觉得带星号*也太多了,就直接看3.3小节吧

一、git安装后-指定名称和邮箱(用户签名,首次安装git必须设置,否则无法提交代码)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

二、创建版本库
$ mkdir learngit	//创建
$ cd learngit	//使用
$ pwd	//查看当前目录
$ git init	//初始化,生成.git文件(若该文件隐藏,则使用ls -ah)

*三、把文件添加add和提交commit到版本库
$ git add test.txt	//添加暂存区指定文件
$ git add .      //提交暂存区所有的文件
$ git commit -m "提交说明信息"	 文件名//提交
$ git commit -m "提交说明信息" .		//一次性提交多个文件,注意:必须在当前版本库和当前目录下


*四、版本控制
$ git log	//查看提交历史记录,从最近到最远,可以看到3次
$ git log --pretty=oneline	//加参,简洁查看
$ git reflog	//查看每一次修改历史
$ cat test.txt	//查看文件内容
$ git status	//查看工作区中文件当前状态
$ git reset --hard HEAD^(HEAD~100)(commit id)	//回退版本,版本号可以使用git reflog查看
$ git checkout -- test.txt	#丢弃工作区的修改,即撤销修改
$ git reset --hard          #将所有内容回退到最近一个未修改的版本
$ git reset HEAD test.txt	#丢弃暂存区的修改(若已提交,则回退)

五、删除文件
$ rm test.txt
//直接删除
$ git rm test.txt
$ git commit -m "remove test.txt"
//删错了,恢复
$ git checkout -- test.txt

*六、远程仓库
$ ssh-keygen -t rsa -C "youremail@example.com"	//创建SSH Key
$ git remote add origin git@github.com:Daisy/AKgit.git	//关联
$ git push -u origin master	//将本地内容推送到远程仓库(第一次)
$ git push origin master	//将本地内容推送到远程仓库(之后)
$ git remote -v        //查看远程仓库信息
$ git remote rm origin	//删除远程仓库(解绑)
$ git clone git@github.com: Daisy/AKgit.git	//克隆远程仓库
//克隆之后使用和查看
$ cd gitskills
$ ls
$ git remote	//查看远程库的信息
$ git remote -v	//查看远程库的详细信息

*七、多人协作(分支操作)
$ git checkout -b 分支名	//创建并切换到分支
$ git branch 分支名	//创建分支
$ git checkout 分支名	//切换分支
$ git merge 分支名     //将分支合并到当前分支
//新版本
$ git switch -c 分支名	//创建并切换到分支
$ git switch master	//直接切换分支
$ git branch		//查看当前分支
$ git merge dev	(--no-ff)(-m)//合并,把dev分支的工作成果合并到master分支上
$ git branch -d 分支名	//删除分支 
$ git stash	//将现场储藏起来
$ git stash list	//查看储存的工作现场
//恢复和删除
$ git stash apply
$ git stash drop
//恢复并删除
$ git stash pop
$ git cherry-pick 4c805e2	//复制修改
$ git push origin master(dev)	//推送分支
$ git checkout -b dev origin/dev	//创建远程origin的dev分支到本地
$ git pull	//抓取分支(解决冲突)
$ git branch --set-upstream-to=origin/dev dev//指定本地与远程dev的链接
$ git rebase	//把本地未push的分叉提交历史整理成直线

八、标签管理
$ git tag v1.0	//打标签
$ git tag -a v0.1 -m "version 0.1 released" 1094adb //指定标签名和说明文字
$ git tag	//查看所有标签
//若是忘记打,则查找历史提交commit id ,再打上
$ git log --pretty=oneline --abbrev-commit
$ git tag v0.9 f52c633
$ git show v0.9		//查看标签详细信息
$ git tag -d v0.1	//删除标签
$ git push origin v1.0	//推送标签到远程
$ git push origin –tags	//一次性推送全部本地标签
//删除标签,(若已推送到远程,先从本地删除,从远程删除)
$ git tag -d v0.9
$ git push origin :refs/tags/v0.9 

九、自定义git
$ git config --global color.ui true	//让git显示颜色
//忽略特殊文件
//.gitignore文件
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
//把该文件也提交到git
$ git add -f App.class		//强制添加被忽略的特殊文件
$ git check-ignore -v App.class	//检查哪个规则出错
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 不排除.gitignore和App.class:
!.gitignore
!App.class
$ git config --global alias.st status	//配置别名
$ git config --global alias.unstage 'reset HEAD'  //配置操作别名
$ git config --global alias.last 'log -1'	//显示最后一次提交信息
$ git last	//显示最近一次的提交
$git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"  //颜色
$ cat .git/config //查看每个仓库的git配置文件
$ cat .gitconfig  //查看当前用户的git配置文件
3.2 Git相关配置
  • 要使用Git首先需要设置用户签名否则提交代码会报错,用户签名的设置主要用到两个指令

    • git config -global user.name 用户名:设置用户名
    • git config-global user.email 邮箱:设置用户邮箱(Git不会对邮箱进行验证,但是必须要要设置)

    设置好后可以去C盘的**.gitconfig**进行查看:

    image-20220826170252039

image-20220826170333754

注意:用户签名跟我们使用Git访问的远程库Github或Gitee的账号密码没有关系,它只是一个标记,让Git知道现在是谁在操作Git,因为可能这个Git不止一个用户在使用,每个用户的配置信息很可能都是不一样的

  • 初始化本地库。设置好用户签名后,还需要使用git init指令初始化本地库,否则无法使用Git操作你的代码

    在文件中使用初始化指令后会出现一个**.git**文件:

    image-20220826171559916

    image-20220826171828487

    注意:这个文件夹默认是隐藏的,需要在查看中勾选隐藏项目,才能看得到。同时一定不要顺便去修改它

  • 查看Git相关的配置信息

    • git config -l:查看Git所有配置信息

      image-20220826165318862

    • git config --system --list:查看系统配置文件

      image-20220826173000155

    • git config --global --list:查看当前用户配置

    • git config user.name:查看当前用户名

    • git config user.email:查看当前用户邮箱

      image-20220826173209242

      Git系统配置文件所在位置:(里面存放的是Git的系统配置信息,可以通过git config --system --list进行查看)

      image-20220826173739582

      知识拓展:Linux中系统文件都是存放在gitcofig文件中

      Git用户配置文件所在位置:(里面存放的当前用户的Git配置信息,可以通过git config --global --list指令进行查看)

      image-20220826174046424

  • Git配置文件介绍

    image-20220826234253107

image-20220826234259127

3.3 Git常用指令

img

image-20220826163431721

常用命令作用
git init初始化本地库(准确来讲是创建一个本地库)
git clone将远程仓库的项目克隆到工作区
git add 文件名将工作区中的文件添加到暂存区
git commit -m "提交信息" 文件名将暂存区的文件提交到版本库
git push将本地库的文件推送到远程仓库
git pull将远程仓库的文件拉取到工作区
git stash将修改的代码先暂存起来,让本地仓库回到最后一次提交时的状态

4、Git基础知识

4.1 Git的三大区域

Git本地有三个工作区域:工作区(Working Directory)、暂存区(Stage或Index)、版本库(Repository或Git Directory)。如果在加上远程的GIt仓库(Remote Directory)就可以分为四个工作区域。

文件在这四个区域之间的转换关系如下

image-20220826161546370

  • 工作区:是在你本地电脑上的一个文件夹,里面是你的代码(可以是任意的,只要能写代码就行)。如下图所示:

    image-20220826182933232

  • 暂存区:是在版本库中的一个index文件,属于版本库中一块特殊的区域,要想进入版本库必须先进入暂存区(虽然它属于本地库,但是一般我们将它和版本库分开讲)

    image-20220826200748543

  • 版本库:(也称本地库)是在你工作区中的一个**.git隐藏文件夹**,注意它虽然工作区中,但是却不属于工作区,只是物理上在工作区中而已。

    image-20220826200950750

    这里需要注意的是,文件提交到版本库后,文件仍然能在工作区上看见,但是每次切换版本或者分支,提交到版本库中的文件都会改变,而在工作区中的文件是不会随着分支的切换而改变的

    image-20220827094744309

  • 远程库:是用来存放代码的地方,不在本地。一般我们用到的远程库有Github、Gitee,当然也可以使用GitLab自己搭建一个远程库

4.2 Git中文件的四种状态

可能我们使用Git在一段时间操作了许多文件,当我们想要提交时,为了区分要哪些是要提交的文件,哪些是不需要提交的文件,Git就将文件分为了四种状态,这四种状态分别是:未追踪踪态(Untracked)、暂存态(Staged)、未修改态(Unmodify)、已修改态(Modified)

image-20220826221647182

说明

  • Untracked:未追踪态。文件在工作区或暂存区中,如果执行git add指令就进入暂存区,同时文件转变称追踪态,也称暂存态。未追踪态的文件通常是红色的,已追踪态的文件是绿色的;
  • Staged:暂存态,文件在暂存区中。这种类型的文件有两种去处:如果执行git commit指令就进入未修改态;如果执行git rm --cached <file>将暂存区中的文件删除,文件重新进入未追踪态;
  • Modified:已修改态,文件按在暂存区中。这种类型的文件有四种去处:如果它通过git add变成暂存态(使用git status查看仍然是已修改态,只是文件变绿了);如果执行git rm --cached <file>将暂存区中的文件删除,文件重新进入未追踪态;如果执行git commit文件变成未修改态;如果文件按执行git checkout文件变为未修改态,和提交不同的时,这个会从版本库中取出对应文件,讲暂存区中修改过的文件进行覆盖;
  • Unmodify:未修改态,文件此时已入本地库。这种类型的文件有两种去处:如果它通过vim修改, 会变为Modified(此时也是未追踪态),修改的文件在暂存区中;如果使用git rm指令将文件移出版本库, 则成为未追踪态;

状态转换演示

git add
git commit
vim
git commit
git commit
git init 初始化本地库
vim 创建文件
untracked
未跟踪态
staged
暂存态
unmodify
未修改态
modified
未跟踪态的已有修改态
modified
暂存态的已修改态
modified
已修改态

初始本地库查看状态git init指令初始化本地库,然后使用git status指令查看本地库的状态:

image-20220826182250606

新建文件查看状态:在工作区中新建一个文件,不使用用git add

image-20220826183436263

将未追踪态转成暂存态:使用git add追踪文件,让文件按编程暂存态

image-20220826203043568

暂存态变成未修改态:使用git commit暂存态的文件提交到本地库

image-20220826204721724

未修改态变成修改态:使用vim指令对文件进行修改,文件变为已修改态,但是文件会重新变回未追踪态

image-20220826210311895

未追踪的修改态变成追踪的修改态

image-20220826210744184

未修改态变成修改态

image-20220826211736555

验证未跟踪的已修改态是在暂存区中的:

  • Step1:先将一个文件正常提交到本地库
  • Step2:然后使用vim进行修改,产看文件状态
  • Step3:直接提交修改后的文件(注意这里不要使用git add)
  • Step4:使用git reflog 查看当前HEAD指针的指向

结果判断:如果执政指向了后面提交的文件,则说明我们提交成功,未跟踪的已修改态在暂存区中,同时未跟踪态不一定是在工作区中。反之则验证失败!(主要是这里老师没有讲清楚,不得不验证一下)

image-20220826231518367

5、版本穿梭

当我们每次修改一次文件提交到本地库后就会产生一个历史版本,版本穿梭就是通过指令进入到某一个版本,每一个版本都有各自特有的数据,特有的环境,不受其它版本的影响。所以不能随便提交到本地库,一旦提交错误的代码这个版本就无法改变了,只能使用其它版本进行替代了。

版本穿梭常用命令

指令作用
git reflog查看版本信息
git reset --hard 版本号跳传到版本号对应的版本

image-20220826234229599

6、Git分支操作

6.1 分支概述
  • 什么是分支

    分支就是一个单独的副本。在版本控制中,我们可以为每一个任务创建一个分支,使用分支意味着程序员将工作于主分支进行了分离,开发自己的分支时不会影响其他分支,如果觉得分支功能很好,可以和主分支进行合并。(分支的底层就是指针,版本穿梭的底层原理也是指针,因为Git是用C写的)

  • 分支和版本的关系

    一对多的包含关系(类似于集合和集合元素的关系),一个分支可以拥有多个版本,一个版本只能属于一个分支!

    image-20220714193815249

  • 分支的底层实现原理:就是指针,Git和Linux都是使用C语言写的。使用HEAD指针指向所在分支,然后通过分支heads下的分支文件指向所在版本

    • HAED本质是一个文件,里面存放了当前分支的信息:

    image-20220827104300900

    • heads下的分支文件指向当前分支的版本,该分支文件存放了当前版本信息:

    image-20220827104424396

    image-20220827104455965

    当在一个分支中(假设是master分支)进行版本穿梭时,HEAD文件中的数据不会发生改变,而headsmaster文件中的版本信息就会发生改变,让master指针指向穿梭的版本(相当于是上图中两个指针同时移动);当进行分支切换时(假设是由master切换到hot-fix),则HEAD文件中的数据会发生改变,让head指针指向hot-fix指针

    简而言之就是:头执政确定分支,分支指针确定版本,头指针只能有一个,分支指针可以有多个

  • 分支的好处

    • 十分适合并发操作,能够有效提高开发效率
    • 提高项目的安全性,当分支出现故障时不会影响其他分支
6.2 分支操作
  • 分支操作常用命令

    命令作用
    git branch 分支名创建分支
    git branch -v查看分支
    git checkout 分支名切换分支
    git merge 分支名把指定分支合并到当前分支

    注意事项

  1. 分支的创建、分支的切换,首先需要版本库中有文件

    当我们刚刚初始化一个本地库时,如果版本库中没有文件,无法查看到当前所在的master分支,无法创建分支;当版本库中有文件后,随时都能进行分支的创建和切换、

  2. 工作区中的文件不会随着分支的切换而改变

    工作区的文件所有的分支都能通过cat指令查看到,因为cat指令实际上查看的是工作区的文件,当我们切换分支时,工作区里面那些提交到版本库的文件内容会随之改变,但是工作区中的文件不会改变

  3. 切换分支时,一定要将修改过的分支提交到本地库

    当我们切换到其他分支,修改完文件后,此时文件在暂存区,如果不提交到本地库,其它分支的该文件也会被修改!

  4. 分支合并产生冲突,手动修改后的文件提交时不能写文件名,分支合并只是改变一方

备注:2.3.可以合并为一点,也就是非本地库的文件分支切换时具有全局性

以上这些都是一些重点注意事项!不注意很容易出错!

示例1

需要先存在一个分支,创建和切换分支分支必须先要将工作区的文件提交到本地库,否则无法创建分支

image-20220827091012324

image-20220827091204565

示例2

使用git commit指令提交到版本库的文件会随着分支的切换而改变,但是工作区的不会

image-20220827100349116

示例3

分支切换时如果不将暂存区的文件提交到版本库,则会影响到到其它分支

image-20220827100716656

image-20220827100746084

image-20220827100736818

image-20220714195549407

示例4

image-20220714204004429

冲突出现的原因:因为我之前在mster分支对test.txt文件进行了修改然后提交,又在hot-fix分支中对test.txt文件进行了修改,系统不知道我们合并是以那个为准(需要手动合并),就会产生冲突(当我们只修改一个文件是,合并以被修改的为准

image-20220714204426496

备注Git中合并其实就是覆盖,Git默认是将合并的两个文件,用修改过的去覆盖掉没有被修改的;如果两个文件都被修改,它就不知道要覆盖谁,就需要你手动去修改(也就是vim进入编辑模式,哪里不需要删哪里)

image-20220714205017600

合并后的文件,提交时,一定不能有文件名,否则报错:

image-20220714205718766

同时合并分支,只是修改了当前所在分支,合并过来的分支没有改变!

比如这里,我们在master中进行了分支合并操作,将hot-fix的test.txt合并到master分支上的test.txt,只有master分支上的test.txt改变了,hot-fix上的test.txt内容不改变

image-20220714205806246

7、Git团队协作机制

  • 团队内协作

image-20220827105727794

  • 跨团队协作

    image-20220714210949183

二、Github

Github 的图像结果

1、Github基本介绍

  • 什么是Github

    GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。

    官网:Github

    Github的前世今生:这里

  • Github的作用有哪些

    • 提供代码托管服务

    • 提供代码存储。可以在Github上建造属于你的个人仓库,存放你的代码,GitHub本质就是充当Git的一个远程库角色,同时也是全球最大使用人数最多的Git远程库

    • 方便找寻项目资源。有很多人将优秀的代码都放在Github上的仓库中,并且Github是强烈支持开源的,很多人都会将仓库设置成public,大家都能进行访问并下载

    • 提供代码在线编辑功能。可以直接在线编辑你的代码,或者更改别人的代码(必须经过被人授权)

    • 提供信息交流。Github作为全球最大的同性交友平台,我们可以通过邮箱或者拉取请求窗口与其他人友好交流,同时上面有很多计算机界的大牛,这里我就推荐几个大牛:

      • Linus Torvalds,嘿嘿,这个人大家肯定都很熟悉吧,就是开篇那位Git祖师爷😆

        它也是开源界的领袖人物,一身都在致力于开源事业,看看这位勤奋的祖师爷,我们还有什么理由不努力呢😃

        image-20220827171557497

      • John Resig:JQuery的创始人,同样也是一尊大神

        image-20220827172314315

      • Jake Wharton:Android之神,GitHub 全球排名第二位!

        image-20220827172445830

        ……

      看到这里,不禁感慨,大神之所以是大神,勤奋是必不可少的,加油吧少年(ง •_•)ง

  • 什么是代码托管服务

    通俗来讲,代码托管服务就是指在保证代码唯一性的前提下,实现多人共同协作开发,我们只需要通过一些指令就能操作托管的代码,无需关心如何实现。比如我们将本地库的代码通过push推送到Github上,我们只需要敲一个指令就可以了,Github就能直接接收代码,同时对代码进行保护和管理,其它人要用或者要修改需要经过你的同意。顺便提一句,托管服务不一定需要联网,Git也是拥有托管服务功能的,只是只能在本地进行,所以通常选用Github作为代码托管平台

  • 代码托管的作用有哪些

    • 保障代码的安全
    • 简化对代码的操作。只需要通过指令就能直接操作代码,比如想要克隆代码,直接一个git clone而不是傻傻地CV

    ……

2、Github的基本使用

温馨提示:如果觉得Gitub访问太慢,主要有三个选择(实际上更多,下面三种方法是我亲测有效的)

  1. 搭建CDN,推荐链接在下面,这个方法最稳,但是相对而言比较麻烦,推荐指数⭐⭐⭐
  2. 使用镜像访问,GitClone - GitHub缓存加速网站,为开发者服务,这个最简单,虽然也能访问到GitHub上的资源,但是不能访问原本的,也不能使用GitHub仓库(失去了灵魂),顶多用来找资源,推荐指数⭐⭐
  3. 使用插件加速,推荐使用:GitHub加速,这个相对简单但是插件不太稳定,推荐指数⭐⭐⭐⭐
2.1 仓库的建立和删除
  • 仓库的建立

    image-20220827174155515


    image-20220827174838689

    image-20220827174845173

  • 删除库

    image-20220827181910865

    image-20220827181924342

2.2 Github基本操作

前面我们已经学会了如何在GitHub上创建删除仓库,现在我们就来学习使用本地库和GitHub建立连接,然后进行代码的推送克隆操作吧。

常用指令

git romote -v        #查看当前所在远程地址的别名
git remote add 链接的别名 仓库的链接[https://github.com/Chinafrfq/Test/test1]  #给链接创建起别名
git clone  仓库的链接     #克隆远程仓库
git pull 链接别名(或链接) 分支名   #将远程库对应分支中的文件拉取到本地库的当前分支
git push 链接别名(或链接) 分支名   #将本地库对应分支中的文件推送到GitHub上对应的仓库里面
将分支推送到远程库
2.2.0 访问设置

本地库访问Github主要有两种方式,一种是HTTPS(安全访问),一种是SSH(免密访问)。相较而言HTTPS访问起来更加简单、安全,但是需要登录账号,但SSH的方式进行访问Github要快上许多。2.2.1 我们使用的HTTPS的访问方式,这里我们用一下SSH免密访问

$ ssh-keygen -t rsa [-C 设置的邮箱] # 指定未某一个账号设置免密登录,后面[]中也可以不用,默认使用当前账号
# 然后连续敲三次回车

备注:除了使用rsa加密算法,还可以使用Ed25519

image-20220828133241420

执行完上述步骤后,在C:\Users\ghp目录下会生成一个**.ssh**文件夹

image-20220828133556437

将公钥的内容复制到Github上:

image-20220828133755762image-20220828135132914

2.2.1 push操作

注意事项

  1. (细节非重点,但是要了解)最好先到windows菜单中查看凭据管理器,凭据管理器会自动记住一个账号,如果我们在一台电脑上使用多个账号,系统会默认push到凭据管理器记住的那个账号
  2. 只能将本地库的文件push到远程库,工作区的文件push直接报错,暂存区的文件push无报错,但是显示无任何数据更新;
  3. 成功push的文件,会直接进入本地库
  • Step1复制访问链接。创建好仓库,我们点击查看仓库,然后复制访问链接,本地库使用访问链接进行访问

    这里既可以选择HTTPS也可以选择SSH,也可以使用SSH免密登录,2.2.0小节有介绍

    image-20220827203640207

  • Step2给访问链接起别名

    在本地库中,将访问的链接起一个别名(有点类似于域名,就是方便记忆)

    image-20220827204238241

  • Step3push文件。将本地库的文件推送到Github对应的仓库中

    工作区的文件按push直接报错:

    image-20220827211619387

    暂存区的文件提交,显示无数据更新:(红色的已修改态也是在暂存区,所以提交也是下面这种情况)

    image-20220827212141028

    将文件提交到本地库,然后就可以成功提交了:

    image-20220827211831346

    现在就能在GitHub上的Test/test1仓库中看到刚刚提交的文件了:

    image-20220827211454300

    image-20220827214647901

2.2.2 pull操作

pull操作主要是用来跟新本地库的代码的。

注意事项

  1. 如果我们将远程库的文件进行了修改,又将本地库的文件进行了修改,此时进行pull操作会本地库文件更新失败!
  • Step1修改仓库的文件。将之前push到仓库的hello.txt文件进行修改

    image-20220827222902129

  • Step2修改本地文件。将本地库的hello.txt文件进行修改

    image-20220827223222611

  • Step3进行pull操作。直接出现失败,显示需要进行文件合并

    image-20220827223521659

    image-20220827223603869

解决方案

  • 方案一暂存文件。执行git stash指令后将修改过的代码封存起来(存到一个栈中),同时回退到未修改的版本,再进行pull操作,此时我们就能够成功pull到远程库修改过的代码了,最后建议将栈中的文件pop出来,不然栈会溢出

    • Step1:使用git stash指令将修改的文件放到栈中暂存起来,然后将文件出栈

    image-20220827225932870

    image-20220827225234345

    • Step2:手动合并代码,然后进行提交

      注意:提交时不要写文件名

    image-20220827225430144

    image-20220827230725144

  • 方案二回退版本

    • Step1:使用git reset --hard指令回退到之前的版本
    • Step2:使用pull指令进行拉取
    • Step3:手动修改pull后的代码,然后提交本地库,完成本地库更新

两种方法的比较:推荐使用方法一,因为它既能保留本地库中文件的修改部分,又能保证远程库中文件修改的部分;方法二会直接将覆盖掉本地库中修改的部分,假如你只是想要远程库的代码,可以使用这种方式,同时需要注意git reset --hard指令的坑使用这条指令会直接将暂存区的文件清空!!!!请谨慎使用

2.2.3 clone操作

克隆干了三件事,initpullremote

注意

  1. 克隆不需要初始化本地库,它是直接将远程库CV下来(当然CV操作是Git做的),在本地形成一个新的本地库
  2. 克隆会自动给链接取别名,默认别名是origin

image-20220828002424118

image-20220828002454219

3、Github团队协作

一般一个项目很难一个人完成开发,毕竟不是每一个人都是全栈开发师,所以我们需要进行团队协作,Github就提供了一个团队协作的功能。首先需要项目(也可以说是远程仓库)的创建者向其它成员发起邀请,其它人接收了邀请就能一起参与开发了,大家能够将这个远程仓库的代码Clone到本地,然后一起完善各自的部分,最后再push到这个远程库。

image-20220828131855838

3.1 发送邀请
  • Step1:创建仓库,并发送邀请函

    image-20220828003807784

    image-20220828004829193

    image-20220828005011358

    邀请链接:https://github.com/Chinafrfq/Test-test1/invitations

  • Step2被邀请者同意邀请

    image-20220828005229997

    由于只有一个人,同时我也懒得再创建一个账号了,所以就到此为止了吧<(^-^)>

3.2 fork操作

当项目的创建者,向我们发送邀请,我们同意以后,就能够直接来到他们的仓库,然后将仓库中的代码要么fork到我们自己的远程仓库进行在线修改,要么clone到本地仓库,使用IDE进行修改

  • Step3被邀请者修改,其它成员接收请后,可以看到你仓库中的项目,有两种方式可以修改代码

    • 方式一frok。将你仓库中的代码fork到其它成员的仓库中,直接再仓库中进行修改(这个很费功力)

    • 方式二clone。将你仓库中的代码clone到本地,使用IDE进行修改,修改好后再push一下就OK了

      这里就详细讲解一下frok代码的流程

      1)fork 代码

      image-20220828010611801

      2)将fork到远程库中的代码进行修改:

      image-20220828124212208

      image-20220828124710842

      image-20220828124840676

      3)提交代码:

      image-20220828131302143

3.3 pull request操作

当我们使用fork将别人的代码叉到我们自己的仓库后,我们虽然进行了修改,并且进行了提交,但是提交的代码仍然是在我们自己的仓库,我们还需要将代码发送给别人

1)发送拉取请求:

image-20220828131036711

image-20220828131106284

image-20220828131416183

2)项目的创建者只要接收拉取请求,就可以看到别人修改的代码,同时别人还可以点击comment发送信息给拉取请求发出者

同时创建者还可以点击Merge pull request进行代码合并

4、IDEA集成Git

4.1 配置Git

在使用IDEA集成Git前,我们需要给GIt配置忽略文件

  • 什么是忽略文件

    我们使用IDE的时候,都会生成一些IDE相关的配置文件,这些文件不参与项目的实际运行

  • 为什么要忽略文件

    为了提高代码的移植性。当我们将项目push到远程库,其它人进行拉取的时候,可能由于使用的IDE不同,就会导致运行失败,所以我们需要将这些与IDE相关的配置文件忽略掉,这样在push代码文件时时就不会将这些文件也上传到Github上

IDEA集成Git的步骤

编写Git忽略文件
git.ignore
引用Git忽略文件
配置IDEA访问Git的路径
创建本地库
  • Step1:编写忽略文件,格式: XXX.ignore(建议命名未git.ignore)

    # Compiled class file
    *.class
    
    # Log file
    *.log
    
    # BlueJ files
    *.ctxt
    
    # Mobile Tools for Java (J2ME)
    .mtj.tmp/# Package Files #
    *.jar
    *.war
    *.nar
    *.ear
    *.zip
    *.tar.gz
    *.rar
    
    hs_err_pid*
    
    .classpath
    .project
    .settings
    target
    .idea
    *.iml
    
  • Step2:在Git的用户配置文件中引用忽略文件

    image-20220828154555265

  • Step3:配置IDEA访问Git的路径

    image-20220828154945736


    image-20220828155320873

  • Step4创建本地库

    image-20220828160432658

    image-20220829080859467

    image-20220828160836039

4.2 使用Git
add
commit
修改
commit
文件在暂存区
绿色,staged
文件在本地库
白色,unmodify
文件在暂存区
蓝色,modified
文件在本地库
白色,unmodify
版本切换
切换分支
合并分支
文件在工作区
红色,untracked
  • 执行Add操作

    将项目文件提交到本地库中,将文件添加到暂存区,添加成功后文件会绿

    备注:这里未添加看到是绿色的是因为我已经提交过一遍了

    image-20220829082735965

  • 执行commit操作

image-20220829083008839

image-20220829083054848

将文件提交到本地库后,文件会绿(或黑,根据你的主题变化,夜晚主题是白色的,白天主题是黑色的)

image-20220829090735596

  • 修改提交过的文件

    修改文件:

image-20220829084311124

修改后的文件

image-20220829090817149

  • 将修改过的文件提交到本地库

image-20220829085642990

image-20220829090248638

此时文件

  • 查看各版本的信息

    image-20220829092304110

  • 版本切换

    image-20220829092524401

    image-20220829092626573

    同时当前目录下的代码页发生了改变!

  • 创建分支

    • 方式一

    image-20220829093107474

    image-20220829093228680

    image-20220829093955471

    • 方式二

    image-20220829093805718

  • 分支切换

    • 方式一

    image-20220829094507078

    备注:黄色代表头指针,绿色的代表分支指针

    • 方式二

    image-20220829094253517

  • 合并分支

    • 方式一

    image-20220829160806488

    • 方式二

    image-20220829160706883

  • 解决代码合并冲突

    当两个分支都进行了修改,然后再进行合并就会发生合并冲突。解决方法和前面是一样的,都是手动合并

    image-20220829163436938

    image-20220829163351871

    IDEA十分智能,合并后的代码会帮我们直接添加到本地库中,无需再手动添加

    image-20220829164103451

5、IDEA集成Github

5.1 配置Github

登录Github账号

image-20220829164524762

温馨提示:这个Github按钮一般是IDEA自带的,社区版可能没有,需要到插件商店下载Github插件

这里页可以使用账号登录,也可以使用Token登录。Token登录需要生成口令,地址如下:

⚠==注意==:口令只会显示一次,一旦刷星就再也找不到了,建议将口令存在一个文件中

image-20220829165927194

登录成功O(∩_∩)O

image-20220829170204610

5.2 使用Github

除了图形化界面执行Git指令外,还可以在Terminal窗口敲git指令(推荐)

5.2.1 创建远程库

使用IDEA上传代码到Github上

image-20220829170833360

image-20220829170841021

image-20220829170857532

上传的项目是直接放在新创建的远程库中,相当于执行了创建远程库+push,再Github的仓库中可以查看到分享的项目:

image-20220829170926161

5.2.2 push操作

push操作主要用来将我们在本地库中写好的代码上传到远程库

注意事项如果本地库的代码比远程库代码的版本低,无法进行push操作!一个成熟的程序员在push之前都会检查本地库和远程库的区别,如果发现本地库的代码版本低于远程库代码的版本,在修改本地代码前一定要先pull一下,否则修改了也push不上

  • 方式一

    image-20220829171728627

  • 方式二

    image-20220829171851351

    image-20220829172020663

    如果想使用SSH登录,可以手动设置:

    image-20220829172210493

image-20220829174153584

5.2.3 pull操作

pull操作和push操作一样也有两种方式,主要用来更新本地库的代码

注意事项如果本地库的代码和远程库的代码都进行了修改,此时进行pull会出现合并冲突,需要手动合并,详情参考:前面

image-20220829175300572

image-20220829175315929

pull冲突合并演示:

image-20220829181251917

image-20220829181426545

5.2.4 clone操作
  • 方式一

image-20220829182109221

image-20220829182847979

image-20220829183013267

  • 方式二

    image-20220829184858914

三、Gitee

Gitee 的图像结果

1、Gitee基本介绍

  • Gitee是什么

    Gitee是一个托管平台,是开源中国创建的。

  • Gitee的作用是什么

    主要作用和Github一样,其主要目的还是为了解决国内访问Github慢(前面有介绍)

  • Gitee和Github的区别

    • 用户群体不同。Gitee基本上是中国用户,社区也是全中文的;Github是全球性的社区,用户遍及全球
    • 项目数量不同。Gitee上的开源项目没有Github多,Gitee迁移了一些Github上的优秀项目
    • 所属国家不同。Gitee是国内的开源中国,服务器在国内;Github是外国开发的,现在属于微软,服务器在美国旧金山;这也导致Gitee的访问速度要远远高于Github

2、Gitee的基本使用

和Github基本一致(由于Gitee全是中文可以说对于英语水平不高的而言还更加简单),具体可以参考Github的使用方式(PS:毕竟Gittee是Github的模仿者)

3、IDEA集成Gitee

3.1 配置Gitee
  • Step1:安装插件

    image-20220829211339474

    image-20220829211938678

  • Step2登录账号,这个和Github是一样的

    image-20220829212036353

    image-20220829212208753

    PS:layne2017@163.com

3.2 使用Gitee

Gitee的操作和Github极其类似,毕竟Gitee是Github的仿照者,这里就不详细介绍了

  • 创建远程库

image-20220829234330171

image-20220829234528980

  • push操作

image-20220830093959461

image-20220830094008358

image-20220830094112509

  • pull操作

image-20220830094304750

image-20220830094401737

  • 导入Github仓库

    嘿嘿,这才是Gitee的核心功能,就是国内下载Github上项目的跳板,假如Github访问、下载很快的话,谁还用Gitee,

    但这里有一说一Github还是不太安全的,古语云”非我族人,必有异心“,从前段时间Github封禁俄罗斯开发人员的账号就可以知道了,开源没有国界,但是开源者有国界;科学没有国界,但是科学家有国界,在最危难的时候还是得靠祖国!

    image-20220830095228329

image-20220830095709311

当我们成功在Gitee导入了Github上的项目后,当Github上的项目更新了,Gitee上的项目也可以动过手动刷新

image-20220830100136825

跟新后,可以看到我在Github上添加的语句也能在Gitee上看到了

image-20220830100309761

四、GitLab

GitLab 的图像结果

1、GitLab基本介绍

  • GitLab是什么

    GitLab是一个基于Git的代码仓库管理工具(和Github是类似的)。

    Gitlab是由两名乌克兰程序员创建的,起初是完全开源的,后来拆分成社区版(收费)和企业版(不收费),这一点也无可厚非啊,毕竟好用,别人开发者也需要吃饭啊(●ˇ∀ˇ●),而且它一部分功能是采用最新的go语言编写的。GitLab一般用于公司自键Git代码仓库,具有很强的跨平台性。

    因其Log是一只狐狸,所以也称极狐

    官网:GitLab

  • GitLab的作用

    主要作用和Github是一样的,都是用来托管代码的;主要区别是GitLab是开源的,安全性更高,Github是非开源的(不要误会,这里指的是Github本身,并没有说它上面的项目),所以很多大公司都会选择GitLab搭建公司内部的Git远程库

……


如果觉得本文对你有所帮助,欢迎点赞👍、评论✍、收藏⭐

参考文章:


  1. 一般我们说的本地就是指你正在使用的计算机 ↩︎

  2. 快照区别于备份,它是快照是管理版本控制和创建轻量级、易于访问的数据或系统版本的技术(或方法) ↩︎

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识汲取者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值