Git详解
Git是一个免费的、开源的**分布式版本控制系统**,它可以在任何时间点, 将文档的状态作为更新记录保存起来,也可以在任何时间点, 将更新记录恢复回来。知识点:版本控制:版本控制是一种记录文件内容变化,以便来查阅特定版本修订情况的系统。版本控制其实最重要的是可以记录文件修改历史记录,从而能够让用户查看历史版本,方便版本切换。为什么要使用版本控制:个人开发过渡到团队协作在版本控制过程中,同时
文章目录
该文章已同步收录到我的博客网站,欢迎浏览我的博客网站,xhang’s blog
1:Git概述
Git是一个免费的、开源的**分布式版本控制系统**,它可以在任何时间点, 将文档的状态作为更新记录保存起来,也可以在任何时间点, 将更新记录恢复回来。
知识点:
版本控制:版本控制是一种记录文件内容变化,以便来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而能够让用户查看历史版本,方便版本切换。
为什么要使用版本控制:
个人开发过渡到团队协作
2:集中式版本控制和分布式版本控制
2.1集中式版本控制
集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作
2.2分布式版本控制
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
-
服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
-
每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
3:Git简史
4:Git工作机制
5:Git和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
局域网:
- GitLab
互联网:
- GitHub
- Gitee码云
6:Git的安装
去官网下载:
安装成功:
在电脑桌面右键打开Git命令行客户端,输入git --version查看git版本信息。
7: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 版本号 | 版本穿梭 |
7.1设置用户签名和设置SSH免密登录
7.1.1设置用户签名
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
基本语法:
git config --global user.name 用户名
git config --global user.email 邮箱
在本地Window用户目录下找到git的配置文件
7.1.2设置SSH免密登录
- 进入git bash,输入以下命令
ssh-keygen -t rsa -C "邮箱"
- 在用户目录下生成公钥和私钥或者使用命令直接查看公钥
- 在gitee上添加公钥
- 测试SSH连接
输入命令:
ssh -T git@gitee.com
7.2初始化本地库
一:创建一个空的文件件
二:在空文件当中打开Git命令行窗口
三:执行初始化命令,自动生成.git文件,但是此文件是一个隐藏文件。
基本语法:
git init
执行命令查看隐藏文件:
7.3查看本地库状态
基本语法:
git status
可以看到本地库中没有提交任何文件
创建文件并测试
在vim编辑器的命令行模式下添加文件内容
查看到刚刚创建的文件
再次查看本地库状态
test.txt文件标记为红色,表示该文件未被追踪。
7.4添加暂存区
将上一个未被追踪的文件添加到暂存区
基本语法:
git add 文件名
文件由红色变为绿色,表示该文件已经被追踪。
及该文件已经在暂存区
在Git工作机制当中已经说了暂存区中文件可以进行删除,但是工作区当中的文件依旧存在。
例子:删除工作区的文件,查看
7.5提交本地库
将暂存区的文件提交到本地库
基本语法:
git commit -m "日志文件" 文件名
查看刚刚被提交的版本信息
git reflog
查看详细的提交版本信息
git log
7.6修改文件
进入vim编辑器,修改文件内容。
查看本地库状态
将修改后的文件添加到暂存区,并且提交到本地库
查看提交版本信息
7.7查看历史记录
基本语法:
#查看版本信息
git reflog
#查看版本的详细信息
git log
7.8版本穿梭
版本穿梭就是相当于快照,可以在本地仓库进行版本的前进与后退。
基本语法:
git reset --hard 版本号
查看文件内容,文件内容为第一个版本内容:
Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示
8:Git分支
8.1公司中服务器的运行模式
8.1什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
8.2分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
8.3分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
8.3.1查看分支
语法:
git branch -v
8.3.2创建分支
语法:
git branch 分支名
可以看到已经创建的hot-fix分支
8.3.3切换分支
可以看到当前是在master分支上
将分支切换到刚刚创建的hot-fix分支上
语法:
git checkout 分支名
切换分支后修改文件,重新添加到暂存区并提交到本地库:
再切换到master分支查看文件内容:
8.3.4合并分支
把指定的分支合并到当前分支上
语法:
git merge 分支名
在master分支下合并hot-fix分支
8.3.5合并分支产生的冲突
冲突产生的原因:
合并分支时,两个分支在==同一个文件的同一个位置==有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。
一:master分支下test.txt文件的内容:
二:hot-fix分支下test.txt文件的内容:
三:切换到master分支下,合并hot-fix分支:
可以发现自动合并失败
四:查看本地库状态:
五:查看文件内容:
六:手动合并
七:添加到暂存区,提交本地库
注意:此时使用 git commit 命令时不能带文件名
八:查看两个分支下的文件内容
8.4切换分支的本质
切换分支的本质就是移动 HEAD 指针。
master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。
HEAD 如果指向 master,那么我们现在就在 master 分支上。HEAD 如果指向 hotfix,那么我们现在就在 hotfix 分支上。
9:Git团队协作机制
9.1团队内协作
9.2跨团队协作
10:GitHub操作
登录官网
10.1创建远程仓库
远程库的名字一般和本地仓库的名字保持一致
10.2远程仓库的基本操作
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git remote add 远程仓库别名 远程地址 | 起远程仓库别名 |
git push 远程仓库别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程仓库地址 | 将远程仓库的内容克隆到本地 |
git pull 远程仓库别名 分支 | 将远程仓库对应分支最新内容拉下来后与当前本地分支直接合并 |
git remote rm 远程仓库地址别名 | 移除远程地址别名 |
10.2.1创建远程仓库别名
基本语法:
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
刚刚创建的远程库地址为:
https://github.com/sunwebgo/Git_repository.git
一:查看远程库
可以发现现在没有远程库别名
二:创建远程库别名
10.2.2推送本地库到远程仓库
语法:
git push 别名 分支
将master分支推送到远程库
提示通过浏览器登录GitHub
推送完成:
查看文件内容:
10.2.3拉取远程库到本地库
更新本地库内容
拉取远程库到本地库
语法:
git pull 别名 分支
查看本地库状态:
拉取后自动提交到本地库
查看文件内容:
10.2.4克隆远程库到本地
语法:
git clone 远程地址
创建新的文件夹
在远程仓库获取到远程仓库地址
在此文件内打开Git,执行命令
在此文件夹下生成了对应的远程库文件
clone 会做如下操作。
1、拉取代码。
2、初始化本地仓库。
3、创建别名
10.3GitHub团队内协作
团队成员可以在本地库修改,再推送到远程库即可
下面的情况是clone(克隆)实现的,所以不需要加入团队就能推送font>
一:首先查看远程库别名、本地库状态、本地库中的文件
二:修改本地库文件,添加到暂存区、提交到本地库
三:推送到远程库
推送成功
四:切换到本地库,拉取刚刚clone推送的远程库
拉取成功,查看文件内容是否更新:
10.4GitHub跨团队协作
将远程仓库的地址复制发给邀请跨团队协作的人
团队外的人就可以通过远程库链接打开远程仓库。其可以通过在线的方式修改文件内容,也可以通过克隆的方式将项目拉取到本地库进行修改
修改完后,团队外的人需要创建一个拉取请求:
然后在团队内成员回收到拉取请求:
团队人员进行审核后,合并到远程库
11:idea集成Git
11.1配置Git忽略文件
需要忽略的文件有idea指定文件,target目录下的文件。
一:为什么要忽略他们呢?
与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。
二:如何忽略?
创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore)
这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下
忽略文件规则如下:
# 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
*.xml
在用户家目录下创建忽略文件
添加忽略规则
在家目录下找到.gitconfig文件中引用忽略配置文件
注意:这是需要使用正斜线“/”
11.2定位git程序
在idea中进行配置
11.3初始化本地库
一:创建新工程
二:在项目中创建本地库
11.4添加文件到暂存区
发现pom文件变红了,表示此文件没有添加到暂存区。
添加文件到暂存区
添加后颜色变绿
在src在创建新的项目目录,创建类
提示是否将创建的文件添加到本地库
将整个项目添加到暂存区
提交到本地库,发现只有绿色文件提交
提交到本地库后文件变为正常颜色:
11.5切换版本
修改代码后文件变蓝,表示该文件被追踪过,但是修改了
将项目添加到暂存区,并提交到本地库(也可以直接提交到本地库)
在 IDEA 的左下角,选择Git,然后点击 Log 查看版本
查看刚刚创建的版本,指针指向最新版本
切换版本
头指针指向指定的版本,并且代码内容已经更改。
11.6创建分支
11.7切换分支
首先查看当前分支
切换分支
可以看到master分支有Checkout选项,而当前指针指向的分支没有Checkout选项
11.8合并分支1.0(正常合并)
更改hot-fix分支下的内容
将hot-fix分支提交到本地库
master分支
在master分支下合并hot-fix分支
合并后master分支下的内容变为三行
11.9合并分支2.0(冲突合并)
切换到hot-fix分支添加内容
再次提交到本地库
切换到master分支下更改内容
再提交到本地库
在master分支下合并hot-fix分支
提示冲突,手动合并
进行合并
master分支下合并成功
12:idea集成GitHub
12.1安装GitHub插件
12.2登录GitHub账号
跳转到页面
授权成功
在idea中登录GitHub成功
上述方式登录失败的解决方案:采用Token方式进行登录
采用生成的令牌进行登录
12.3分享项目到GitHub
Test.java文件内容
12.4推送本地库到远程库
修改代码,提交到本地库,再推送到远程库
推送成功
12.5拉取远程库合并本地库
push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,==一定要保证本地库的版本要比远程库的版本高!==因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!
修改远程库内容
在idea中拉取远程库
12.6克隆远程库到本地库
操作:删除test_git项目,从远程仓库再克隆一份。
删除文件后重新打开idea,选择Get from VCS:
查看clone后的项目,和原项目一样。
13:Gitee
13.1Gitee简介
众所周知,GitHub 服务器在国外,使用 GitHub 作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国内的项目托管网站-码云。
码云是开源中国推出的基于 Git 的代码托管服务中心,网址是 https://gitee.com/ ,使用方式跟 GitHub 一样,而且它还是一个中文网站,如果你英文不是很好它是最好的选择。
13.2Gitee创建远程仓库
14:idea集成Gitee
14.1安装Gitee插件
14.2登录Gitee账号
打开setting,选择Version Control选项,可以查看到Gitee
添加账户
14.3推送本地库到远程库
在Git中选择Push推送
获取到远程库链接,定义远程库并推送
推送成功,查看远程库
修改本地库内容,提交到本地库,再次推送到远程库
推送完成,再次查看远程库
14.4拉取远程库到本地库
首先修改远程仓库内容
拉取远程库
拉取成功
14.5Gitee导入GitHub项目
码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。
点击新建仓库,进行导入
测试导入GitHub项目
image-20220920224127039
远程仓库导入成功
GitHub上远程仓库更新,Gitee上远程仓库可以强制更新
点击强制更新按钮
14.6git的回滚
15:自建代码托管平台GitLab
15.2GitLab简介
GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
官网地址:https://about.gitlab.com/
安装说明:https://about.gitlab.com/installation/
15.3GitLab安装
15.3.1服务器准备
准备一个系统为 CentOS7 以上版本的服务器,要求内存 4G,磁盘 50G。关闭防火墙,并且配置好主机名和 IP,保证服务器可以上网。
切换为root用户,进入以下文件
修改主机名
重启虚拟机:运行级别6 init 6
使用xshell连接虚拟机
连接成功
测试网络连接:
查看防火墙状态并关闭
15.3.2安装GitLab
GitLab安装包地址
gitlab/gitlab-ce - Packages · packages.gitlab.com
将此包上传到服务器/opt/module 目录下即可
- 创建脚本
vim gitlab-install.sh
sudo rpm -ivh /opt/module/gitlab-ce-15.3.3-ce.0.el8.x86_64.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/gitlab-ce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
- 给脚本添加执行权限
chmod +x gitlab-install.sh
- 执行脚本,安装gitlab
./gitlab-install.sh
- 初始化GitLab服务
gitlab-ctl reconfigure
- 启动GitLab服务
gitlab-ctl start
15.3.3使用浏览器访问GitLub
在浏览器输入ip地址,因为GitLub的默认端口是80
没有账号的首先注册一下:
15.4idea集成GitLab
- 首先在idea中安装插件
- 添加GitLab服务
-
将项目添加到暂存区,再提交到本地库
-
创建远程库链接
- 输入用户名和密码,推送
-
查看远程库的master分支
- 将master分支合并到main分支上
-
master分支已经删除,main分支合并完成
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)