学习Git这一篇就够了

学无止境 Java工程师的进阶之旅

目录



一、简介

1.1、Git概述

官方文档教程

Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。

1.2、版本控制?

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

1.3、版本控制工具

1.3.1、集中式
在这里插入图片描述

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

1.3.2、分布式
在这里插入图片描述

客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  • 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  • 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.4、工作机制

  • 工作区:通过写好的代码,放在了磁盘区,不是特指编译器中的代码
  • 暂存区:通过工作区git add放到此处
  • 本地库:通过暂存区的git commit放到此处
  • 远程库:通过本地库上传到远程库,代码托管中心是基于网络服务器的远程代码仓库
    在这里插入图片描述


二、安装

教程写在另一篇文章



三、常用命令

命令名称作用
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 init
在这里插入图片描述
该目录为隐藏文件夹,勾选以下
在这里插入图片描述

3.2、查看本地库状态

命令说明
git status详细信息
git status -s简短信息

1、当前目录没有文件需要提交
在这里插入图片描述
2、在当前目录创建文件hello.txt内容为hello Git!!!,再次查看状态,此时显示文件未被追踪
在这里插入图片描述

3.3、添加到暂存区

命令说明
git add [文件名]添加单个
git add .全部添加

1、可以使用git add [文件名]将文件添加到暂存区
在这里插入图片描述

2、再次查看状态,此时文件已经到暂存区中 (可以使用git rm --cached [文件名]取消追踪)
在这里插入图片描述

3.4、提交到本地库

git commit -m "信息" [文件名]

1、提交到本地库
在这里插入图片描述
2、查看状态
在这里插入图片描述

3.5、历史版本

3.5.1、查看历史版本

命令说明
git reflog查看版本信息
git log查看版本详细信息

在这里插入图片描述

3.5.2、模拟文件修改并提交

1、模拟文件修改后提交,这里内容加了This is second version这一行
在这里插入图片描述
2、查看状态:此时文件未被追踪
在这里插入图片描述
3、需要执行git add来进行追踪
或者可以执行git restore来放弃更改(执行该命令后hello.txt就会回到之前的未修改的状态)
在这里插入图片描述
4、重新修改文件内容后执行git add
在这里插入图片描述
5、执行git commit -m "second commit"
在这里插入图片描述
6、查看历史版本(此时指针指向第二个版本)
在这里插入图片描述

3.5.3、版本穿梭

git reset --hard [版本号]

1、当前版本
在这里插入图片描述
2、穿梭回第一版本,会生成新的记录并且HEAD指针的master分支指向第一次提交的版本号
在这里插入图片描述
3、查看文件信息(此时回到了第一次提交的时候的内容)
在这里插入图片描述
此时查看.git文件夹里的HEAD文件,发现当前在master分支
在这里插入图片描述
进入.git/refs/heads文件夹,可以看到当前master分支对应的版本号
在这里插入图片描述

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示
在这里插入图片描述

在这里插入图片描述

3.6、总结

  • 工作目录中的每个文件都可以处于以下两种状态之一:已跟踪未跟踪。跟踪的文件是上次快照中的文件,以及任何新暂存的文件;它们可以是未修改的、修改的或暂存的。简而言之,被跟踪的文件是 Git 知道的文件。

  • 未跟踪的文件是其他所有文件——工作目录中不在上一个快照中且不在暂存区域中的任何文件。当您第一次克隆存储库时,您的所有文件都将被跟踪且未修改,因为 Git 只是将它们签出并且您没有编辑任何内容。

  • 当您编辑文件时,Git 将它们视为已修改,因为自上次提交以来您已经更改了它们。在您工作时,您有选择地暂存这些修改过的文件,然后提交所有这些暂存的更改,然后循环重复。

在这里插入图片描述



四、Git分支操作

4.1、分支概述

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。
在这里插入图片描述

4.2、分支的好处

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

4.3、分支操作

4.3.1、分支命令

命令说明
git branch [分支名]创建分支
git branch -v查看分支
git checkout [分支名]切换分支
git merge [分支名]把指定的分支合并到当前分支

4.3.2、分支创建及切换测试

测试创建分支
在这里插入图片描述
测试切换分支
在这里插入图片描述
查看状态,此时HEAD指向test分支
在这里插入图片描述

4.3.3、合并分支

模拟测试:master分支为正在使用的分支,此时出bug了需要修改,将test分支修改后的内容合并到master分支

1、创建文件夹git-studygit init初始化该仓库
2、创建文件hello.txt文件内容为Hello Git!!!添加到暂存区后提交,提交信息为first commit master
在这里插入图片描述

3、创建并切换到test分支 修改hello.txt为Hello Git!!! test!!!添加到暂存区后提交,提交信息为first commit test
在这里插入图片描述
4、切换为master分支,执行合并命令git merge [被合并的分支]
在这里插入图片描述

4.3.4、分支冲突

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

模拟测试:在上一个例子的基础下,此时master分支和test分支有着同样的内容

1、修改master分支的hello.txtHello Git!!! test!!! I'm master添加到暂存区并提交,提交信息为master modifie
2、修改test分支的hello.txtHello Git!!! test!!! I'm test添加到暂存区并提交,提交信息为test modifie
3、切换为master分支并merge test分支(此时显示无法自动合并分支)
-
4、此时查看状态发现文件有两处修改(并且右上角为master/MERGING
在这里插入图片描述

解决冲突

1、编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> test
在这里插入图片描述
2、人为修改成如下
在这里插入图片描述
3、添加到暂存区并提交(此时不能带文件名提交),提交信息为merge success
在这里插入图片描述
4、查看文件内容
在这里插入图片描述
5、查看分支
在这里插入图片描述
6、查看test分支下的hello.txt,仍然是原来的内容
在这里插入图片描述

图解
在这里插入图片描述



五、远程仓库

5.1、团队协作

1、团队内协作
在这里插入图片描述
2、跨团队协作
在这里插入图片描述

5.2、远程仓库操作

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


六、GitHub操作

GitHub
点击右上角 Sign up 注册并登录账号

6.1、创建远程库

1、新建远程库
在这里插入图片描述
2、配置远程库信息
在这里插入图片描述
3、地址
在这里插入图片描述

6.2、远程库创建别名

别名最好就是对应本地库名
在这里插入图片描述

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

切换到master,准备推送

执行git push git-study master
登录账号,推送成功(因为是外网,推送失败很正常,推荐使用Gitee)
在这里插入图片描述

在这里插入图片描述



七、Gitee操作

7.1、配置公钥

Gitee官网
1、注册账号
2、实现推送免密码登录(上述操作的github每次推送都需要密码)
进入C:\Users\用户名\.ssh目录执行ssh-keygen -t rsa -C [邮箱名]不断按回车键
在这里插入图片描述
3、复制id_rsa.pub的公钥
4、进入主页的个人设置
在这里插入图片描述

在这里插入图片描述
5、配置了公钥就可以直接通过ssh链接拉取(提交)远程库代码(正常是通过http拉取)
在这里插入图片描述
6、Linux配置公钥,同样是执行ssh-keygen -t rsa
.ssh目录在~目录
在这里插入图片描述
linux进行push需要使用ssh地址才能进行自动识别公钥,使用http需要输入gitee账号密码才能push

7.2、创建远程库

1、创建远程库
在这里插入图片描述
2、配置远程库信息(建议名字和本地库名字一样)
在这里插入图片描述
3、现在创建的时候只能私有创建了,公开需要手动配置
在这里插入图片描述

4、复制远程库地址
在这里插入图片描述

7.3、远程库创建别名

本地初始化一个git-study文件夹并添加一个a.txt文件
给远程库创建别名git remote add [别名] [远程库地址]
在这里插入图片描述

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

git push [别名] 分支名
在这里插入图片描述

7.5、拉取远程库到本地库

模拟其他人员修改远程库代码

1、修改文件
在这里插入图片描述
2、修改
在这里插入图片描述
3、拉取远程库代码git pull [别名] [分支名]
在这里插入图片描述

7.6、克隆远程仓库到本地

命令:git clone [地址]

1、先创建一个新的文件夹laptoy在这个文件夹内输入
在这里插入图片描述
2、默认帮我们配置好了远程库别名为origin
在这里插入图片描述

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

7.7、模拟团队内协作

现在有一个远程库git-study,laptoy加入了团队,首先需要远程库的管理员邀请laptoy加入团队
在这里插入图片描述
邀请laptoy成功后

1、laptoy克隆该远程库内容
2、修改文件内容,添加到暂存区并提交
3、推送到远程库
在这里插入图片描述
4、查看远程库状态
在这里插入图片描述

7.8、模拟跨团队协作

7.8.1、外部人员

登录一个新的账号laptoy2,访问其他团队的链接代码,将代码Fock到工作台
在这里插入图片描述
Fock成功
在这里插入图片描述

laptoy2修改完代码点击提交,此时的提交是本地库的提交,需要通过pull request提交
新建一个pull request
在这里插入图片描述
配置pull request
在这里插入图片描述
创建成功跳转到这里
在这里插入图片描述

7.8.2、远程库管理员

1、此时有一个pull request
在这里插入图片描述
2、进入查看
在这里插入图片描述
3、查看代码
在这里插入图片描述

4、审核通过 测试通过 合并 接受pull request
在这里插入图片描述
5、此时远程库代码已经成功修改
在这里插入图片描述

7.9、小结以及忠告

作为团队人员,加入团队后使用git clone克隆代码,提交前请务必先git pull远程库的代码



八、IDEA集成Git

8.1、配置git.ignore

1、创建忽略规则文件 xxx.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

# 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 文件中引用忽略配置文件(此文件在 Windows 的家目录中(C:/用户/lapto))

[user]
	name = laptoy
	email = laptoy458@163.com
[core]
	excludesfile = D:/Environment/Git/git.ignore

8.2、IDEA定位git

在这里插入图片描述

8.3、IDEA初始化本地库

1、点击 VCS----Create Git Repository
在这里插入图片描述

2、点击确定
在这里插入图片描述

3、发现所有文件都变红了,也就是没被追踪的状态(红色),证明初始化仓库成功
在这里插入图片描述

8.4、添加到暂存区

1、新建文件后点击确定追踪(绿色)
在这里插入图片描述
2、添加到所有文件到暂存区
在这里插入图片描述
3、忽略的文件依然是灰色,未忽略的文件加入暂存区
在这里插入图片描述

8.5、提交文件到本地库

1、提交文件
在这里插入图片描述
在这里插入图片描述
2、提交成功后被提交的文件变为正常色
在这里插入图片描述

8.6、版本穿梭

8.6.1、模拟两次提交

1、文件修改后变成蓝色
在这里插入图片描述
2、第二次提交
在这里插入图片描述

3、再增加内容
在这里插入图片描述

4、第三次提交
在这里插入图片描述

8.6.2、版本追踪

在这里插入图片描述

8.6.3、版本穿梭

1、右键需要穿梭的版本
在这里插入图片描述

2、头指针指向穿梭后的版本
在这里插入图片描述

3、内容回到该版本
在这里插入图片描述

8.7、创建及切换分支

1、右键项目
在这里插入图片描述
2、或者直接点击IDEA右下角
在这里插入图片描述
3、展示所有分支
在这里插入图片描述
4、点击New Branch创建hot-fix分支
勾选下面的勾勾自动创建并切换切换
在这里插入图片描述
5、可以看见右下角为hot-fix分支
在这里插入图片描述
6、切换为主分支
在这里插入图片描述

8.8、合并分支

8.8.1、正常合并

1、切换到hot-fix分支并修改代码后提交 提交信息为"first commit with hot-fix"
在这里插入图片描述
2、切换为master分支准备合并hot-fix分支(此时头指针指向master分支)
在这里插入图片描述
3、合并分支
在这里插入图片描述
4、合并成功
在这里插入图片描述

8.8.2、冲突合并

在上文的基础上
1、切换回hot-fix分支 新增代码并第二次提交 提交信息second commit with hot-fix在这里插入图片描述
2、切换为master分支并修改代码后提交 提交信息fourth commit
在这里插入图片描述
3、通过分支图可以看到出现偏移
在这里插入图片描述
4、在master分支进行冲突合并
在这里插入图片描述
5、解决冲突
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、解决冲突完毕 头指针指向master hot-fix分支留在原地
在这里插入图片描述

九、IDEA集成Gitee

9.1、连接

1、先安装Gitee插件
在这里插入图片描述
2、登录账号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.2、推送到远程库

1、用码云创建好一个远程库git-test(上面的文章有教程)在这里插入图片描述
2、推送到远程库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、push后稍等,右下角提示成功
在这里插入图片描述
4、查看远程库
在这里插入图片描述

9.3、修改后推送到远程库

1、修改代码后重新提交并push
在这里插入图片描述
在这里插入图片描述
2、查看远程库
在这里插入图片描述

9.4、从远程库拉取被修改的代码

1、模拟其他成员修改远程库代码
在这里插入图片描述
2、拉取代码
在这里插入图片描述
在这里插入图片描述
3、拉取成功
在这里插入图片描述

9.5、克隆代码

1、Git from VCS(不同版本的idea可能不同)在这里插入图片描述
2、
在这里插入图片描述



十、GitLab

10.1、简介

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

10.2、安装

10.2.1、服务器准备

1、CentOS 7 或以上版本 4G内存 50G硬盘
2、搭建虚拟机看这篇
3、配置静态Ip地址看这篇
4、Window配置hosts文件映射C:\Windows\System32\drivers\etc\hosts 添加如下 ip改为配置的静态ip

192.168.88.129  gitlab-server

5、保证服务器能上网 ping www.baidu.com
6、禁用防火墙 systemctl disable firewalld

10.2.2、安装包准备

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

1、下载地址 点击右上角下载
在这里插入图片描述

2、直接将此包上传到服务器/opt/module目录下
3、将该文件名改为gitlab-ce.rpm

10.2.3、编写安装脚本

1、编写安装脚本 vim gitlab-install.sh

sudo rpm -ivh /opt/module/gitlab-ce.rpm

sudo yum install -y curl policycoreutils-python openssh-server cronie

sudo lokkit -s http -s ssh

sudo yum install -y postfix

sudo service postfix start

sudo chkconfig postfix on

curl https://packages.gitlab.com/install/repositories/gitlab/gitlabce/script.rpm.sh | sudo bash

sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlabce

2、给脚本添加执行权限chmod +x gitlab-install.sh
在这里插入图片描述
3、执行脚本./gitlab-install.sh 注意一定要保证服务器可以上网(挺久的)

10.2.4、初始化GitLab服务

gitlab-ctl reconfigure 需要加载挺久的
在这里插入图片描述

10.2.5、启动和停止GitLab服务

gitlab-ctl start   启动
gitlab-ctl stop    停止

在这里插入图片描述

10.3、浏览器访问

1、访问虚拟机ip地址
2、访问hosts文件配置好的gitlab-server/ 注意这里/一定要加
在这里插入图片描述
3、用户名为root
密码在/etc/gitlab/initial_root_password文件中
在这里插入图片描述
4、登录成功页面
在这里插入图片描述

10.4、创建远程库

1、点击右上角的New Project
2、选中创建空白工程
在这里插入图片描述
3、创建信息
在这里插入图片描述
4、创建成功
在这里插入图片描述

10.5、IDEA集成GitLab

10.5.1、配置

1、安装插件
在这里插入图片描述
2、配置GitLab
在这里插入图片描述

10.5.2、推送到远程库

1、拷贝远程库地址

默认给的是例子链接http://gitlab.example.com/root/git-test.git
改成自己的服务名http://gitlab-server/root/git-test.git
在这里插入图片描述
2、配置远程库信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、推送到远程库
在这里插入图片描述



  • 15
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Laptoy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值