• 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配置文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    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 将暂存区中的文件删除,文件重新进入未追踪态;
    • Modified:已修改态,文件按在暂存区中。这种类型的文件有四种去处:如果它通过git add变成暂存态(使用git status查看仍然是已修改态,只是文件变绿了);如果执行git rm --cached 将暂存区中的文件删除,文件重新进入未追踪态;如果执行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上对应的仓库里面
    将分支推送到远程库
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2.2.0 访问设置

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

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

    备注:除了使用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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
    • 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. 快照区别于备份,它是快照是管理版本控制和创建轻量级、易于访问的数据或系统版本的技术(或方法) ↩︎

  • 相关阅读:
    叶酸PEG叶酸,FA-PEG-FA
    redis分布式锁
    【第56篇】GhostNet:廉价操作得到更多的特征
    linux 安装 Anaconda3
    面试必问Spring的核心概念
    射频信号处理知识点点滴滴
    java基于SpringBoot+Vue的社区菜店 线上买菜系统elementui
    File类
    Unity InputField宽度自适应内容
    jvm 一之 类加载器
  • 原文地址:https://blog.csdn.net/qq_66345100/article/details/126771507