Git教程

1、Git

1.1、概述

  • Git是一个免费的、开源的分布式版本控制系统 ,可以快速高效地处理从小型到大型的各种项目
  • Git易于学习,占地面积小,性能 极快 。 它具有廉价的本地 库 ,方便的暂存区域和多个工作
    流分支等特性。 其性能优于 Subversion、 CVS、 Perforce和 ClearCase等 版本控制 工具。
  • 官网

1.2、版本控制

  • 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统
  • 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换

1.3、版本控制工具

集中式版本控制工具

  • CVS、SVN、VSS
  • 集中化的版本控制系统能够注入CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法
  • 这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松
  • 事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障,如果服务器宕机一小时,那么这一小时内,谁都无法提交更新,也就无法协同工作

img


分布式版本控制工具

  • Git、Mercurial
  • 像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份
  • 分布式版本控制系统出现之后,解决了集中式版本控制系统的缺陷
    • 服务器断网的情况下,也可以进行开发,因为版本控制是在本地进行的
    • 每个客户端保存的也都是整个完整的项目,包含历史记录更加安全

img

1.4、Git简史

img

1.5、Git工作机制

img

1.6、Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库

  • 局域网
    • GitLab
  • 互联网
    • GitHub(外网)
    • Gitee码云(国内网站)

2、Git安装

官网下载

直接无脑下一步next

查看是否安装成功

右键任意位置,在右键菜单里选择Git Bash Here即可打开 Git Bash命令行终端。在Git Bash终端里输入 git --version查看 git版本,如图所示,说明 Git安装成功

3、Git常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit m " 日志信息 " 文件名提交到本地库
git reflog查看历史记录
git reset hard 版本号版本穿梭

3.1、设置用户签名

基本语法:

  • git config --global user.name 用户名
  • git config --global user.email 邮箱

在这里插入图片描述

并且在自己C:\Users\hj151下有个.gitconfig文件,打开里面就是我们设置的用户签名

说明:

签名的作用是区分不同作者身份,用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的,Git首次安装必须设置一下用户签名,否则无法提交代码

注意:这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系

3.2、Git初始化本地库

基本语法:git init

在这里插入图片描述

3.3、查看本地库状态

语法:git status

在这里插入图片描述

3.4、新增文件

语法:vim hello.txt,然后按i进入INSERT,要想复制粘贴,需要先按Esc,然后yy复制,最后p粘贴

在这里插入图片描述

文件内如输入完毕后按Esc,然后按,再按wq,才算完成新增文件,再次查看

在这里插入图片描述

3.5、添加暂存区

基本语法:git add 文件名

在这里插入图片描述

3.6、提交本地库

将暂存区的文件提交到本地库

语法:git commit -m "日志信息" 文件名

在这里插入图片描述

3.7、修改文件

语法:vim 文件名

在这里插入图片描述

在这里插入图片描述

3.7、历史版本

3.7.1、查看历史版本

语法:

  • git reflog:查看精简版本信息
  • git log:查看版本详细信息

在这里插入图片描述

3.7.2 版本穿梭

语法:git reset --hard 版本号

这里的版本号是指用git reflog命令查询出来的7位数版本号

在这里插入图片描述

在这里插入图片描述

3.7.2、版本穿梭原理

Git版本切换,底层其实是移动的Head指针,具体原理如下图所示

  • head指针指向master分支,master分支指向first版本

在这里插入图片描述

  • 之后有了second版本,masterr指针指向second版本

在这里插入图片描述

  • 之后又有了third版本,master指针指向third版本

在这里插入图片描述

4、Git分支

4.1、什么是Git分支

  • 在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支
  • 使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己的分支的时候,不会影响主线分支的运行
  • 对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本

4.2、分支的好处

  • 同时并行推进多个功能的开发,提高开发效率
  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可

4.3、分支的操作

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

4.3.1、查看分支

基本语法:git branch -v

在这里插入图片描述

4.3.2、创建分支

基本语法:git branch 分支名

在这里插入图片描述

4.3.3、切换分支

基本语法:git checkout 分支名

在这里插入图片描述

4.3.4、修改分支文件

git checkout 分支名切换到要修改的分支

然后vim 文件名修改分支文件

在这里插入图片描述

4.3.5、合并分支

基本语法:git merge 分支名

正常合并不冲突

在这里插入图片描述

合并产生冲突

冲突产生原因:

  • 合并分支时,两个分支在同一文件的同一位置有两套完全不同的修改
  • 有两套完全不同的修改,Git无法替我们决定使用哪一个,必须认为决定新代码内容

例如,我们首先在master分支的倒数第二行进行修改,并将其添加到暂存区,再提交到本地库

在这里插入图片描述

接着,我们切换到hot-fix分支,修改第五行代码,并将其添加到暂存区,再提交到本地库

在这里插入图片描述

之后我们在master分支上合并hot-fix分支,发现产生冲突

在这里插入图片描述

解决冲突

1、编辑有冲突的文件,删除特殊符号,决定要使用的内容

特殊符号<<<<<< HEAD 当前分支代码 =======合并过来的代码 >>>>>> hot-fix

在这里插入图片描述

删除完成之后保存,再次添加到暂存区,并再次提交到本地库(注意使用git commit -m “注释信息”,不用文件名

在这里插入图片描述

这里修改后,也只是master分支被修改了,切换回hot-fix分支的文件并未修改

5、Git团队协作机制

5.1、团队内协作

在这里插入图片描述

举个例子:

岳不群首先用git初始化自己的本地库,写了一套华山剑法,利用push命令将自己的本地库推送到代码托管中心(GitHub、Gitee),岳不群把大弟子冷狐冲拉进自己项目团队后,大弟子令狐冲可以通过clone命令将代码托管中心的代码完整复制到自己的本地库,令狐冲修改两招后将自己本地库的代码再次push到代码托管中心,这样岳不群就可以通过pull命令拉取令狐冲修改的代码,来更新自己的本地库。

5.2、跨团队协作

在这里插入图片描述

例子:

令狐冲请东方不败修改代码,东方不败通过fork命令从岳不群的远程库中拿取代码,再通过clone命令复制到自己的本地库,修改完成后使用push推送到自己的远程库,然后使用Pull request拉取请求给岳不群,岳不群审核后使用merge命令合并对方代码到自己的远程库,再通过pull命令拉取到自己的本地库,这样修改后的华山剑法岳不群和令狐冲就都可以使用了

6、GitHub

6.1、创建远程仓库

登录GitHub创建远程库

在这里插入图片描述

6.2、远程仓库操作

命令名称作用
git remote -v查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容克隆到本地
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

6.2.1、创建远程仓库别名

基本语法:

  • git remote -v查看当前所有远程地址别名
  • git remote add 别名 远程地址起别名

在这里插入图片描述

在这里插入图片描述

注意:起的别名最好也跟本地库一致

6.2.3、推送本地分支到远程仓库

基本语法:git push 别名(或远程仓库地址) 分支

在这里插入图片描述

授权后,会提示推送成功,我们在GitHub上查看我们的git-demo仓库,发现有我们的hello.txt文件

在这里插入图片描述

6.2.4、拉取远程库分支到本地库

语法:git pull 别名 分支

我们在远程库进行hello.txt的修改

在这里插入图片描述

然后将远程库代码拉取到本地库

在这里插入图片描述

6.2.5克隆远程仓库到本地

基本语法:git clone 远程地址

我们另一台用户需要克隆我们的远程仓库到它的本地仓库,由于使用一台电脑模拟,所以在克隆之前需要在凭据管理器中删除我们之前的GitHub凭据

在这里插入图片描述

我们在D盘下新建一个文件夹git-clone,然后在此文件夹下右键git bash here,之后执行命令进行克隆

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

小结:clone会做如下操作。1、拉取代码 2、初始化本地仓库 3、创建别名

6.3、邀请加入团队

6.3.1、团队内协作

我们在git-clone的git-demo(假设这是大弟子令狐冲)下操作,执行vim hello.txt修改文件,然后添加到暂存区,最后提交到本地库

在这里插入图片描述

在这里插入图片描述

我们在GitHub上,在对应仓库添加成员

在这里插入图片描述

在这里插入图片描述

在 atguigulinghuchong这个账号 中的 地址 栏 复制 收到邀请 的 链接 ,点击接受邀请

在这里插入图片描述

然后令狐冲就可以push,岳不群也可以pull或clone,查看令狐冲的修改

6.3.2 跨团队协作

1、将远程仓库地址复制发给邀请跨团队协作的人,比如东方不败

在这里插入图片描述

2、然后东方不败的GitHub账号里的地址栏复制收到的链接,然后Fork到自己的远程库

在这里插入图片描述

3、东方不败就可以在自己的远程库中操作这个仓库里的文件,修改完成后,提交

在这里插入图片描述

4、岳不群可以在Pull Request中审核东方不败的请求

在这里插入图片描述

6.4 SSH免密登录

在C盘下自己的用户目录下右键git bash here,输入命令ssh-keygen -t rsa -C 自己的邮箱名

在这里插入图片描述

在此目录下,右键git bash here

在这里插入图片描述

这样会生成.ssh文件夹,里面含有私钥和公钥

在这里插入图片描述

之后在GitHub上添加公钥

在这里插入图片描述

接下来再往远程仓库push东西的时候使用SSH连接就不需要登录了

7、IDEA集成Git

7.1、配置Git忽略文件

我们使用IDEA时会生成一些无关文件,如图

  • Eclipse特定文件

在这里插入图片描述

  • IDEA特定文件

在这里插入图片描述

  • Maven项目的target目录

在这里插入图片描述

我们之所以要忽略它们,是因为它们与项目的实际功能无关,不参与服务器部署运行

如何忽略?

1、在C盘用户hj151目录下创建git.ignore文件

以下为文件内容:

在这里插入图片描述

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (
.mtj.

# Package Files
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see
http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

.classpath
.project
.settings
target
.idea
*.iml

2、在.gitconfig文件中引用忽略配置文件(.gitconfig在C盘用户hj151目录下)

[user]
	name = Augenestern
	email = .....@qq.com
[core]
	excludesfile = C:/Users/Augenestern/git.ignore

在这里插入图片描述

3、在IDEA里面定位git运行程序git.exe

在这里插入图片描述

7.2、IDEA初始化本地库

在这里插入图片描述

默认创建的git仓库就是我们打开的项目所在的目录,我们添加了git仓库之后

在这里插入图片描述

在这里插入图片描述

文件添加到暂存区后变为了绿色,我们可以写些代码,然后将Project添加到暂存区

在这里插入图片描述

这样所有文件都添加到了暂存区,接下来就是提交到本地库了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.3、版本切换

修改TestGit里面的代码,再次添加到暂存区以及提交到本地库,操作参照上面

在这里插入图片描述

在IDEA左下角,点击Git,然后点击Log查看版本日志信息,右键选择要切换的版本,然后在菜单里点击Checkout Revision

在这里插入图片描述

7.4、创建分支

右键项目–>Git–>Branches

在这里插入图片描述

或者IDEA中右下角master

在这里插入图片描述

弹出框中填写分支名称

然后在IDEA右下角可以看到hot-fix,表示分支创建成功,并且已经切换成hot-fix分支

在这里插入图片描述

7.5 切换分支

在IDEA窗口右下角,切换回master分支

在这里插入图片描述

7.6 合并分支

7.6.1、合并无冲突

首先切换到hot-fix分支,修改TestGit内容,然后添加到本地库

切换回master分支,然后合并分支

在这里插入图片描述

合并成功,可以在master分支中看到TestGit中,hot-fix修改后的完整内容

7.6.2、合并有冲突

如下图所示,如果master和hot-fix分支都修改了代码,在合并分支的时候就会发生冲突

在这里插入图片描述

在这里插入图片描述

切换回master分支进行合并操作,就会发生代码冲突
在这里插入图片描述

点击Confilcts框里的Merge按钮,进行手动合并代码

在这里插入图片描述

手动合并完成后,自动提交到本地库。

8、IDEA集成GitHub

首先在IDEA中绑定GitHub账户,步骤如下:

从GitHub官网生成token,settings–>Develop Settings

在这里插入图片描述

在这里插入图片描述

我的口令

然后在IDEA中绑定

在这里插入图片描述

8.1、分享项目到远程库

在这里插入图片描述

在这里插入图片描述

Share之后直接帮我们在GitHub上创建了远程库,并且执行了推送操作

可以直接在GitHub上查看项目了

8.2、push推送本地库到远程库

可以右键点击项目,也可以直接点击工具栏Git,将当前分支push到GitHub远程库中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击push即可

8.3、pull拉取远程库到本地库

注意:

push是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push的操作可能是会被拒绝的,也就是说,要想push成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定要先检查远程库代码跟本地库的区别,如果本地库的代码已经落后,切记要先pull拉取一下远程库的代码,将本地库代码更新到最新以后,然后再修改、提交、push

  • 右键点击项目,可以将远程仓库的内容pull到本地仓库

在这里插入图片描述

在这里插入图片描述

注意:pull是拉取远程库到本地库,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及手动解决冲突的问题

8.4、clone克隆远程库到本地库

在这里插入图片描述

在这里插入图片描述

9、IDEA集成Gitee

9.1、码云Gitee创建远程仓库

在这里插入图片描述

9.2、IDEA安装码云插件

IDEA默认没有安装码云插件,我们第一步要先去settings–>Plungins–>marketplace中下载

在这里插入图片描述

安装好后重启IDEA即可

IDEA中集成Gitee跟集成GitHub差别并无二致,首先在IDEA里面创建一个项目,然后初始化这个项目,添加到暂存区,提交本地库

在这里插入图片描述

9.3、分享项目到Gitee

在这里插入图片描述

9.4、push推送到码云远程库

当然我们也可以自己在码云Gitee上创建远程库,然后获取到远程库的HTTPS/SSH链接,将我们的代码push即可

自定义远程库链接:Define remote,给远程库链接定义一个name,然后在URL里面填入Gitee上远程库HTTPS链接即可,码云服务器在国内,用HTTPS链接即可,没必要用SSH免密链接

在这里插入图片描述

9.5、pull拉取远程库到本地库

我们在Gitee上修改代码,然后使用IDEA pull拉取远程库代码

在这里插入图片描述

在这里插入图片描述

9.6、Clone克隆Gitee的代码到本地库

在这里插入图片描述

在这里插入图片描述

9.7、码云复制GitHub的项目

码云提供了直接复制GitH项目的功能,方便我们做项目的迁移和下载

在这里插入图片描述

在这里插入图片描述

如果GitHub上更新项目后,在码云项目端可以手动同步更新

在这里插入图片描述

10、自建代码托管平台GitLab

10.1、GitLab简介

GitLib是由GitLabInc开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有Wiki和Issue跟踪功能,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizow开发,它使用Rubby语言写成,后来,一些部分用Go语言重写,截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者,GitLab被IBM、Sony、JulichResearchCenter、NASA、Alibaba、Invincea、O‘ReillyMedia、Lebniz-Rechenzentrum(LRZ)、CERN、SpaceX等组织使用

10.2、GitLab官网地址

GitLab官网

安装说明

10.3、GitLab安装

10.3.1、服务器准备

准备一个系统为CentOS7以上版本的服务器,要求内存4G,磁盘50G

关闭防火墙,并且配置好主机名和IP,保证服务器可以上网

10.3.2、安装包准备

Yum在线安装gitlab-ce时,需要下载几百M的安装文件,非常耗时,所以最好提前把所需的RPM包下载到本地,然后使用离线RPM的方式安装

下载地址:

。。。。。。后续以后再更。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值