git本地仓库
git介绍
不管是做为程序猿还是运维工程师,很多人一定都听说过GitHub。
分布式版本控制系统
什么是系统? 就是一个应用程序,部署起来,供我们来使用 什么是版本控制? 不管是在企业中,还是我们个人,我们一定都做过版本控制。 比如: 1.写脚本,一遍一遍的修改 2.大学写论文 3.写技术文档
CDN:分布式静态资源缓存系统
本地仓库git使用
[root@web03 ~]# yum install -y git
git工作区域切换
git基本操作
# 1.将目录初始化成git仓库
[root@web03 ~]# git init /root/code(不在code目录下就写绝对路径,在就是下面的方式:写.当前目录下)
[root@web03 code]# git init .
-----------------------------------------------------------------------------------------------------------
# 2.查看本地仓库状态
[root@web03 code]# git status
# On branch master (现在不用master改用main)
#
# Initial commit
#
# Untracked files: (状态:还没有在git仓库中的文件)
# (use "git add <file>..." to include in what will be committed)
#
# index.html
nothing added to commit but untracked files present (use "git add" to track)
-# git的状态
Untracked:没有被管理(还没有在git仓库中的文件)
Staged/Changes:通过git add放入暂存区(新文件以及被添加到git仓库中)
Unmodified:没有被修改的状态
Modified:文件被修改(已经在git仓库中的文件,但是针对上一次commit提交后又被修改了)
-----------------------------------------------------------------------------------------------------------
# 3.将文件添加到git仓库
[root@web03 code]# git add .
# 4.1查看添加到git仓库后仓库状态
[root@web03 code]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed: (新文件已经被添加到git仓库中)
# (use "git rm --cached <file>..." to unstage)
#
# new file: index.html
# new file: src.js
------------------------------------------------------------------------------------------------------------
# 4.commit提交前需要先指定邮件和名字
[root@web03 code]# git config --global user.email "you@example.com"
[root@web03 code]# git config --global user.name "Your Name"
------------------------------------------------------------------------------------------------------------
# 5.保存当前一个版本(这是对git add . 添加到git仓库进行后续提交)
-#[root@db01 code]# git commit (这个是交互式,需要像编写配置文件一样加进去,注意前面有注释要取消再加)
-#[root@web03 code]# git commit -m 'v1.1官网' (直接在命令行指定)
[master (root-commit) 8c5778c] v1.1官网
2 files changed, 19 insertions(+)
create mode 100644 index.html
create mode 100644 src.js
------------------------------------------------------------------------------------------------------------
# 6.查看git提交日志(查看commit号)
[root@web03 code]# git log
commit f4ceb8ea3f1342ffe7883af56bdd038db1b8f37e
Author: Your Name <you@example.com>
Date: Tue Aug 22 12:28:02 2023 +0800
v1.2官网
commit 8c5778c3eb952de3e3cca71ba1ac8320adc596b1
Author: Your Name <you@example.com>
Date: Tue Aug 22 12:21:16 2023 +0800
v1.1官网
------------------------------------------------------------------------------------------------------------
# 改回之前版本(需要git log查看一下想要回滚版本的commit号,复制前几位即可)
git reset --hard commit号
------------------------------------------------------------------------------------------------------------
# 给commit号打标签
[root@gitlab code]# git tag -a 'v1.3' -m 'v1.3官网'
# 删除本地标签
git tag -d 标签名
# 删除远程标签
git push origin --delete 标签名
# 检查是否删除
git fetch --prune --tags
# 删除commit
场景一
老板:给我写一个官网
程序猿:一天一夜,写出来了,请CEO过目
老板:不够醒目,再改改
程序猿:好嘞,花了一周时间,请CEO过目
老板:还是之前的好看,改回去吧
程序猿:emmmmmm...我该怎么撤回一周内容?
如果你有了GIT就不用再担心上面的场景了,操作如下:
模拟实际生产过程:
# 1.创建写代码的目录(创建代码仓库)
[root@web03 ~]# mkdir code
[root@web03 ~]# cd code
# 2.编写代码
-# 2.1编写html代码
[root@web03 code]# vim index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>代码迭代过程-哈哈王呀</title>
</head>
<body>
<div id="demo"></div>
<script src="src.js"></script>
</body>
</html>
-# 2.2编写JS代码
[root@web03 code]# vim src.js
const string = '老板好,这是您让我写的官网页面,它会动'
let n = 1
demo.innerHTML = string.substring(0,n)
setInterval(()=>{
n+=1
demo.innerHTML = string.substring(0,n)
},200)
--------------#重点#---------------------
# 3.写完就立即加入git仓库: git add .
然后提交: git commit -m 'v1.1官网' (-m备注一下)
root@web03 code]# git add .
[root@web03 code]# git commit -m 'v1.1官网'
[master (root-commit) ad14346] v1.1官网
2 files changed, 19 insertions(+)
create mode 100644 index.html
create mode 100644 src.js
----------------------------------------
# 4.编写好的代码打包,并发给运维(直接发到代码存放路径)
[root@web03 ~]# tar zcf code.tar.gz code/
[root@web03 ~]# scp code.tar.gz 172.16.1.8:/www
# 5.运维部署服务,进行代码上线
-#5.1安装服务
[root@web02 ~]# yum install -y nginx
-#5.2创建代码存放目录
[root@web02 ~]# mkdir /www
-#5.3到代码存放目录解压代码包
[root@web02 www]# tar xf code.tar.gz
# 6.前端根据服务写好页面
[root@web02 ~]# vim /etc/nginx/conf.d/www.conf
server{
listen 80;
server_name _;
index index.html;
root /www/code;
}
-#6.1修改其他配置文件
[root@web02 ~]# vim /etc/nginx/nginx.conf(随便写了个网页,所以把这个文件里面的server删除了,记得看{}与有没有缺)
-#6.2启动服务
[root@web02 ~]# systemctl start nginx
# 7.测试访问官网看效果
浏览器访问10.0.0.8
...........................................
结果老板不满意,重新提了要求,只好再改
............................................
# 8.重新写代码
-#编写index.html代码
[root@web03 code]# vim index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>代码迭代过程-哈哈王呀</title>
<link rel='stylesheet' href='style.css'> #这里加了一个链接style.css代码的
</head>
<body>
<div id="demo"></div>
<script src="src.js"></script>
</body>
</html>
-#编写src.js代码
[root@web03 code]# vim src.js
const string = '老板好,这是您让我写的官网页面,它会动'
let n = 1
demo.innerHTML = string.substring(0,n)
setInterval(()=>{
n+=1
demo.innerHTML = string.substring(0,n)
},200)
-#编写style.css代码
[root@web03 code]# vim style.css
#demo{
border: solid 1px red;
width: 440px;
height: 26px;
background-color: lightpink;
}
---------------#重点#-------------------
# 9.写完就立即 git add . 然后提交 git commit -m 'v1.2官网'
[root@web03 code]# git add .
[root@web03 code]# git commit -m 'v1.2官网'
[master b416f7e] v1.2官网
2 files changed, 12 insertions(+), 5 deletions(-)
create mode 100644 style.css
---------------------------------------
10.
步骤同上
开发写完再次打包发给运维
运维把原来的代码删除,解压用新的代码就好
................................................
测试完给老板看,他居然说第一版的好,让改回去,还好我有git
................................................
# 11.回滚到第一版
-#查看git提交日志(看一下commit号)
[root@web03 code]# git log
commit b416f7e3af7d12c0af0f8c4e000af8c8ea6838bc
Author: 王小葵 <12984820+aaakui@user.noreply.gitee.com>
Date: Wed Aug 23 15:31:20 2023 +0800
v1.2官网
commit ad14346ff07b910706e1c22a9831f4928bceaf69
Author: 王小葵 <12984820+aaakui@user.noreply.gitee.com>
Date: Wed Aug 23 15:24:20 2023 +0800
v1.1官网
-#git reset --hard 版本号,回滚
[root@web03 code]# git reset --hard ad14346ff07b9107
HEAD is now at ad14346 v1.1官网
12.
开发把v1.1版本代码打包发给运维
运维把原来的代码删除,用新的代码就好
git分支
分支创建规则 1.按照功能划分 2.按照环境划分 3.按照开发人员划分 4.按照环境和功能划分
git分支基本操作
# 查看当前分支
[root@web03 code]# git branch
* master
# 创建分支
-#创建ceo分支
[root@web03 code]# git branch ceo_branch
[root@web03 code]# git branch
ceo_branch
* master
-#创建秘书分支
[root@web03 code]# git branch ms_branch
[root@web03 code]# git branch
ceo_branch
* master
ms_branch
# 切换分支(切换到ceo分支)
[root@web03 code]# git checkout ceo_branch
Switched to branch 'ceo_branch'
[root@web03 code]# git branch
* ceo_branch
master
ms_branch
# 删除分支
-#不能删除当前所在分支
[root@web03 code]# git branch
* ceo_branch
master
ms_branch
[root@web03 code]# git branch -D ceo_branch
error: Cannot delete the branch 'ceo_branch' which you are currently on.
-#-D是强制删除
[root@web03 code]# git checkout master
Switched to branch 'master'
[root@web03 code]# git branch -D ceo_branch
Deleted branch ceo_branch (was ad14346).
[root@web03 code]# git branch
* master
ms_branch
[root@web03 code]# git branch -d ms_branch
Deleted branch ms_branch (was ad14346).
[root@web03 code]# git branch
* master
# 合并分支(要切换到要保留的分支里)
[root@db01 code]# git merge ceo_branch
Updating a78f184..62f622e
Fast-forward
style.css | 3 +++
1 file changed, 3 insertions(+)
# 使用-sb查看,被修改同一行的代码文件是谁
[root@db01 code]# git status -sb
## master
D src.js
# 使用git show可以查看当前所以信息
[root@db01 code]# git show
commit 33a0d27f45ce32521778345304b5b1e90b0deac2
Merge: 62f622e f5ed9f8
Author: Your Name <you@example.com>
Date: Wed Aug 23 09:10:00 2023 +0800
Merge branch 'mishu_branch'
那么如果冲突了该如何解决呢,那一定是开发讨论一下,删谁的.... 然后修改内容,改完后,重新add然后提交 vim index.html git add . git commit -m '解决合并冲突'
场景二
老板:给我写一个官网
程序猿:花了一天一夜,做出来了,请老板过目
老板:有点丑,我希望背景颜色是yellow,醒目一些。
老板秘书:我觉得不错,要是字体能做彩色的就好了。
程序猿:MMP,你们的意见就不能统一一下么 ?
此时此刻,优秀的程序员肯定要使用分支功能写两个版本供他们选择了。
使用GIT分支就可以同时存在两个版本啦,操作如下:
模拟实际生产过程:
# 1.创建写代码的目录(创建代码仓库)
[root@web03 ~]# mkdir code
[root@web03 ~]# cd code
# 2.编写代码
-# 2.1编写html代码
[root@web03 code]# vim index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>代码迭代过程-哈哈王呀</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="demo">恭喜发财</div>
<div id="demo2"></div>
<script src="main.js"></script>
</body>
</html>
-#编写main.js代码
[root@web03 code]# vim main.js
const string = '官网内容:恭喜发财,恭喜恭喜你呀,恭喜恭喜你'
let n = 1
demo2.innerHTML = string.substring(0,n)
setInterval(()=>{
n+=1
demo2.innerHTML = string.substring(0,n)
},200)
-#编写style.css代码
[root@web03 code]# vim style.css
#demo2{
margin-top: 50px;
}
---------------#重点------------------------------------
# 3.加入git仓库
[root@web03 code]# git add .
# 4.提交到git仓库
[root@web03 code]# git commit -m 'v1.3官网'
[master 3099e78] v1.3官网
3 files changed, 17 insertions(+), 5 deletions(-)
create mode 100644 main.js
create mode 100644 style.css
-------------------------------------------------------
...................................................
服务已搭建好
开发写完再次打包发给运维,运维部署一下
...................................................
给老板看,结果不满意就算了,他还和秘书意见不一致,各自提了要求
老板:有点丑,我希望背景颜色是yellow,醒目一些。
老板秘书:我觉得不错,要是字体能做彩色的就好了。
...................................................
身为一位优秀的程序员必须写两版,让他们选
此时此刻只好拿出秘密武器:git分支!!!!
...................................................
# 4.给他俩各自创建一个分支,写代码,满足他俩不同的要求
-#创建ceo分支
[root@web03 code]# git branch ceo_branch
-#创建秘书分支
[root@web03 code]# git branch ms_branch
# 5.切换到ceo分支,写代码满足老板需求
[root@web03 code]# git checkout ceo_branch
Switched to branch 'ceo_branch'
-# 查看当前所在分支确认一下
[root@web03 code]# git branch
* ceo_branch
master
ms_branch
# 6.按老板需求写代码
-#编写html代码
[root@web03 code]# vim index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>代码迭代过程-哈哈王呀</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="demo">恭喜发财</div>
<div id="demo2"></div>
<script src="main.js"></script>
</body>
</html>
-#编写main.js代码
[root@web03 code]# vim main.js
const string = '官网内容:恭喜发财,恭喜恭喜你呀,恭喜恭喜你'
let n = 1
demo2.innerHTML = string.substring(0,n)
setInterval(()=>{
n+=1
demo2.innerHTML = string.substring(0,n)
},200)
-#编写style.css代码
[root@web03 code]# vim style.css
body{
background-color: yellow;
}
#demo2{
margin-top: 50px;
}
---------------#重点------------------------------------
# 7.加入git仓库
[root@web03 code]# git add .
# 8.提交到git仓库
[root@web03 code]# git commit -m 'v1.4CEO版'
[ceo_branch 856487b] v1.4CEO版
3 files changed, 20 insertions(+), 5 deletions(-)
create mode 100644 main.js
create mode 100644 style.css
-------------------------------------------------------
# 9.切换到秘书分支写代码,满足秘书需求
[root@web03 code]# git checkout ms_branch
Switched to branch 'ms_branch'
-# 查看当前所在分支确认一下
[root@web03 code]# git branch
ceo_branch
master
* ms_branch
# 10.按秘书需求写代码
-#编写html代码
[root@web03 code]# vim index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>代码迭代过程-哈哈王呀</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="demo">恭喜发财</div>
<div id="demo2"></div>
<script src="main.js"></script>
</body>
</html>
-#编写main.js代码
[root@web03 code]# vim main.js
const string = '官网内容:恭喜发财,恭喜恭喜你呀,恭喜恭喜你'
let n = 1
demo2.innerHTML = string.substring(0,n)
setInterval(()=>{
n+=1
demo2.innerHTML = string.substring(0,n)
},200)
-#编写style.css代码
[root@web03 code]# vim style.css
#demo2{
margin-top: 50px;
}
#demo2{
margin-top: 50px;
}
#demo,#demo2 {
display: block;
/*渐变背景*/
background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,
#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);
color: transparent; /*文字填充色为透明*/
-webkit-text-fill-color: transparent;
-webkit-background-clip: text; /*背景剪裁为文字,只将文字显示为背景*/
background-size: 200% 100%; /*背景图片向水平方向扩大一倍,这样background-position才有移动与变化的空间*/
/* 动画 */
animation: masked-animation 4s infinite linear;
}
@keyframes masked-animation {
0% {
background-position: 0 0; /*background-position 属性设置背景图像的起始位置。*/
}
100% {
background-position: -100% 0;
}
}
---------------#重点------------------------------------
# 11.加入git仓库
[root@web03 code]# git add .
# 12.提交到git仓库
[root@web03 code]# git commit -m 'v1.5ms版'
[ms_branch 1038c5e] v1.5ms版
3 files changed, 40 insertions(+), 5 deletions(-)
create mode 100644 main.js
create mode 100644 style.css
-------------------------------------------------------
把俩分支的代码分别打包给运维,让其部署,给老板和秘书看效果
场景三
结果他俩看完又开始作妖,说如果能把他俩各自的要求合并一下就好了
合并分支
首先,我们需要明确,我们到底要保留哪个分支,毋庸置疑,肯定是master分支。 因为所有的代码,都是在master的基础上去修改的,在企业中也是这样的,首先有一个写好的基础代码框架。 然后拆分不同的功能(不同的分支),那么分支开发完毕,没有太大问题,则可以将分支内容合并到主干(master)上,即便是出了问题,我们也可以根据提交的版本号进行回滚操作。
合并GIT分支,操作如下:
模拟实际生产过程:
# 1.切换到要保留的分支上
[root@web03 code]# git checkout master
[root@web03 code]# git branch
ceo_branch
* master
ms_branch
# 2.合并分支
-#合并CEO分支
[root@db01 code]# git merge ceo_branch
Updating a78f184..62f622e
Fast-forward
style.css | 3 +++
1 file changed, 3 insertions(+)
-#合并秘书分支
[root@db01 code]# git merge mishu_branch
Auto-merging style.css
Merge made by the 'recursive' strategy.
style.css | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
--------合并秘书分支时弹出下面这个文件,保存退出即可---------------
Merge branch 'ms_branch'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
-----------------------------------------------------------------
git可视化GitKraken
把代码打包下载到本地