Git与Gitlab

自动化运维

在这里插入图片描述

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

一、Git与Gitlab介绍

Git、Github、Gitlab 的区别

git 是一套软件 可以做本地私有仓库

github 本身是一个代码托管网站 公有和私有仓库(收费) 不能做本地私有仓库

gitlab 本身也是一个代码托管的网站 功能上和github没有区别 公有和私有仓库(免费) 可以部署本地私有仓库

Git 与 SVN 区别

Git 与 SVN 区别
Git是分布式的,svn不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
git 是分布式的版本控制器 没有客户端和服务器端的概念
svn 它是C/S结构的版本控制器 有客户端和服务器端 服务器如果宕机而且代码没有备份的情况下 完整代码就会丢失

git 主要的工作区域

工作区:代码目录,就是你在电脑里能看到的目录。
暂存区:工作区和版本库之间的缓存区域,一般存放在 .git 目录下的 index 文件(.git/index)中,英文叫 stage 或 index。
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 git 的版本库。

Git工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
    在这里插入图片描述

二、部署Git 服务

安装

yum -y install git
git --version

git安装后需配置用户相关信息

#配置个人的用户名称和电子邮箱
git config --global user.name "lp"
git config --global user.email "1078802338@qq.com"

#设置Git默认使用的文本编辑器, 一般可能会是 vi 或者 vim
git config --global core.editor vim

在这里插入图片描述

查看已有的配置信息

git config --list

在这里插入图片描述

如果使用 --global 选项,那么配置的用户信息会保存在当前用户家目录下的 .gitconfig 文件里, 以后所有的项目都会默认使用此用户信息。
cat ~/.gitconfig

如果要在某个特定的项目中使用其他名字或者电子邮箱,只要去掉 --global 选项重新配置即可,新的设定将会保存在当前项目的 .git/config 文件里。

创建版本库

方法一:在编写代码之前创建工程
git init mypro
初始化空的 Git 版本库于 /root/mypro/.git/

ls -A /root/mypro/
.git
方法二:对已有文件的目录进行初始化
mkdir /root/myweb
cd !$
echo '<h1>this is my web</h1>' > index.html

git init
初始化空的 Git 版本库于 /root/myweb/.git/

ls -A
.git  index.html

在这里插入图片描述

查看 git 状态

git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#	index.html
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

git status -s
?? index.html

在这里插入图片描述

将目录下所有文件都添加到暂存区,只有当暂存区有文件才能commit

git add .

git status -s
A  index.html

git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#	新文件:    index.html
#

在这里插入图片描述

删除暂存区的文件,相当于撤销刚才的 add 操作

git rm --cached index.html

git status -s		#此时文件变成未知状态
?? index.html

git add index.html

commit提交到版本库

git commit -m "init"
[master(根提交) 0296300] init
 1 file changed, 1 insertion(+)
 create mode 100644 index.html
 
git status			#此时工作区为空
# 位于分支 master
无文件要提交,干净的工作区

查看版本库文件

git ls-files

将文件从暂存区和本地一起删除

git rm index.html
rm 'index.html'

ls         //此时目录中 index.html 没有了

git status     //现在的状态是代码库没有了但是暂存区还有
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#	删除:      index.html
#

在这里插入图片描述

commit提交到版本库,彻底删除

git commit -m "rm index.html"
[master bd2197d] rm index.html
 1 file changed, 1 deletion(-)
 delete mode 100644 index.html

git status
# 位于分支 master
无文件要提交,干净的工作区

在这里插入图片描述

查看提交记录

git log

commit bd2197dcf3786ec628323ea6a1e782670b74b625
Author: lp <1078802338@qq.com>
Date:   Sun Aug 29 14:15:46 2021 +0800

    rm index.html

commit 02963004456252f41f00d53cd56b40c32e23df4a
Author: lp <1078802338@qq.com>
Date:   Sun Aug 29 14:13:38 2021 +0800

    init

在这里插入图片描述

返回到init提交时的状态

git checkout 02963004456252f41f00d53cd56b40c32e23df4a
Note: checking out '02963004456252f41f00d53cd56b40c32e23df4a'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD 目前位于 0296300... init


ls		#此时之前删除的 index.html 恢复回来了
index.html
注:不建议在返回某个历史提交的状态后对数据做修改,以防数据紊乱

在这里插入图片描述

返回到最新的master状态

git checkout master

ls     #此时 index.html 没有了

在这里插入图片描述

在暂存区恢复已删除的文件

cp /etc/passwd /etc/shadow /etc/hosts ./

ls
hosts  passwd  shadow

git add .
git status -s
A  hosts
A  passwd
A  shadow

rm -rf *

git status 
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#	新文件:    hosts
#	新文件:    passwd
#	新文件:    shadow
#
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#	删除:      hosts
#	删除:      passwd
#	删除:      shadow
#


git checkout -- *		#撤销工作区的文件改动来恢复文件

ls
hosts  passwd  shadow

在这里插入图片描述

tag管理

可以给某一次提交打标记,如用于版本号
echo '<h1>this is my web</h1>' > index.html
git add .
git commit -m "init"

git tag 1.0			#将当前commit标记为1.0

git tag				#查看所有的tag
1.0

echo '<h2>hello world</h2>' >> index.html

git status -s
 M index.html

git add .
git commit -m "modify index"

git tag 2.0			#将当前commit标记为2.0

git tag
1.0
2.0

在这里插入图片描述

分支管理

git 中默认有一个名为 master 的主分支,还可以创建自定义的分支。

#查看分支
git branch 
* master

git status			#创建分支前应确保工作区是干净的
# 位于分支 master
无文件要提交,干净的工作区

git branch b1       #创建名为 b1 的分支

git branch 
  b1
* master			# *号表示当前所在分支

#切换分支
git checkout b1

git branch 
* b1
  master

#修改分支内容
cp /etc/passwd ./
git add .
git commit -m "add passwd"

ls
hosts  index.html  passwd  shadow
#切换回master分支
git checkout master

ls
hosts  index.html  passwd  shadow

#将分支汇入主干
git merge b1 -m "merge b1 to master"

ls
hosts  index.html  passwd  shadow


#删除分支
git branch -d b1

git branch 
* master

#可以在工作区下创建一个 .gitignore 文件,包含所有不需要 commit 到版本库中的文件名
echo abc123 > abc123.txt
mkdir mytest
cp /etc/hosts mytest/

git status 
# 位于分支 master
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#	abc123.txt
#	mytest/
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

vim .gitignore
.gitignore		#忽略 .gitignore 文件自己
*.swp			#忽略正在被 vi 编辑器打开时产生的以 .swp 为后缀的临时文件
abc123.txt
mytest/*

git status 
# 位于分支 master
无文件要提交,干净的工作区

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、gitlab

--------------- 部署本地gitlab服务器(使用docker搭建) ---------------
                    虚拟机要求至少 4G 内存

安装 docker

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://q7n9qid7.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

在这里插入图片描述

systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 

拉取镜像

docker pull twang2218/gitlab-ce-zh

在这里插入图片描述

由于容器也需要使用 22 端口,需要将容器所在主机的 ssh 服务端口改为 2222

vim /etc/ssh/sshd_config
Port 2222

systemctl restart sshd

#退出当前 ssh 连接,再使用 2222 端口重新连接
ssh -p 2222 root@192.168.100.150

在这里插入图片描述

启动容器

docker run -d \
-h gitlab \                        #指定容器中的主机名
-p 443:443 -p 80:80 -p 22:22 \
--name gitlab \                    #指定容器名
--restart always \
-v /srv/gitlab/config:/etc/gitlab \              #挂载gitlab的配置文件
-v /srv/gitlab/gitlab/logs:/var/log/gitlab \     #挂载gitlab的日志文件
-v /srv/gitlab/gitlab/data:/var/opt/gitlab \     #挂载gitlab的数据
twang2218/gitlab-ce-zh:latest
------------------------------------------------------------------------
docker run -d \
-h gitlab \
-p 443:443 -p 80:80 -p 22:22 \
--name gitlab \
--restart always \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/gitlab/data:/var/opt/gitlab \
twang2218/gitlab-ce-zh:latest

#由于 gitlab 容器需要资源较多,需要等几分钟才能正常使用,等看到状态显示为 (healthy) 就代表已经启动了
docker ps -a
CONTAINER ID   IMAGE                           COMMAND             CREATED         STATUS                   PORTS                                                                                                         NAMES
b6cde725f2c3   twang2218/gitlab-ce-zh:latest   "/assets/wrapper"   2 minutes ago   Up 2 minutes (healthy)   0.0.0.0:22->22/tcp, :::22->22/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   gitlab

在这里插入图片描述

四、gitlab应用

浏览器访问:http://192.168.100.150在这里插入图片描述

1、设置管理员 root 用户的新密码,注意有格式要求,这里设置成 root@123

2、使用管理员 root 用户登录(root/root@123),登录后点击页面上方的【扳手】图标进入“管理区域”
在这里插入图片描述

gitlab 中重要的概念:
●群组(group):对应一个开发团队,比如开发部组、测试部组、运维部组等。
●项目(project):对应软件项目,比如开发部开发的每一个软件项目。
●成员(member):对应用户,用于将用户加入到组中,比如可将几个程序员加入到某一个软件项目组中,各自完成不同的功能模块的代码并上传,来共同完成整个软件项目。

3、创建名为 devops 的组
点击 【新建群组】
【群组路径】、【群组名称】、【描述】都设置成 devops
【可见等级】设置成 公开
其他都保持默认值,点击 【创建群组】
在这里插入图片描述

4、创建自己的账户,如 dl,账户加入到 devops 组中
点击页面上方的【扳手】图标进入“管理区域”
点击 【新建用户】
【姓名】设置成 dl
【用户名】设置成 dl
【电子邮箱】设置成 dl@qq.com
这里密码暂不设置,其他都保持默认值,先点击 【创建用户】

创建好用户后再点击右上角的【编辑】,可在这里设置密码,,如 abc@1234
在这里插入图片描述

5、创建项目 myweb,授权 kgc 是项目的主程序员,使其具有上传代码的权限
点击页面上方的【扳手】图标进入“管理区域”
点击 【新建项目】
【项目路径】群组选项下拉选择 devops
【项目名称】设置成 myweb
【项目描述】设置成 zyxm
【可见等级】设置成 公开
点击 【创建项目】
在这里插入图片描述

添加单个成员到项目中

点击左边菜单【设置】->【成员】进入“项目成员”
【添加成员】中的【选择要邀请的成员】选择 kgc
【选择角色权限】选择 主程序员
点击 【添加到项目】
在这里插入图片描述

通过在群组中添加成员,加入到项目中

点击页面上方的【群组】->【您的群组】选择 devops
点击左边菜单【成员】
【添加成员到 devops】选择 ylx,主程序员
点击 【添加到群组】

6、使用自己创建的账户进行管理
退出当前账户,使用自己创建的账户dl 登录(kgc/abc@1234)
第一次登录会被强制要求修改密码(kgc/root@123),可与旧密码相同,再重新登录

在这里插入图片描述

对于没有创建过 git 版本库的主机

cd /opt
git clone http://192.168.100.150/devops/myweb.git

ls -A myweb/
.git

cd myweb/

touch myxm.md
git add myxm.md
git commit -m "2"
git push -u origin master

在这里插入图片描述
在这里插入图片描述

对于已存在 git 版本库的主机

(1)使用 http 协议将本地软件项目代码推送到 git 服务器

cd ~/myweb/

#添加一个远程仓库上传代码方式的 url 名称为 origin

git remote add origin http://192.168.100.150/devops/myweb.git

#查看远程仓库

git remote

#推送本地代码到远程仓库

git push -u origin --all		#输入账户名和密码(1269651556@qq.com/abc123456)

在这里插入图片描述

#推送 tag 标记到远程仓库

git push -u origin --tags		#输入账户名和密码(1269651556@qq.com/abc123456)

在这里插入图片描述

#刷新页面即可看到上传的代码和对应的 tag 标记
在这里插入图片描述

(2)使用 ssh 免密推送代码

点击右上角的用户选项选择【设置】
点击左边菜单【SSH密钥】,再点击页面中的【generate one】查看如何生成密钥

ssh-keygen -t rsa -C “lp@qq.com” -b 4096 #一路回车
cat ~/.ssh/id_rsa.pub
在这里插入图片描述

git@gitlab:devops/myweb.git

将公钥拷贝到网页中的公钥文本框中,再点击【增加密钥】
在这里插入图片描述

#查看当前的 remote 方式
git remote show origin

#更换上传代码方式
git remote remove origin #删除以前的方式

#添加远程仓库上传代码方式
git remote add origin git@192.168.100.150:devops/myweb.git

git remote show origin

#推送测试
echo '<h3>new line</h3>' >> index.html
git add .
git commit -m "modify index third"

git push
git push --tags

#刷新页面即可看到上传的代码和对应的 tag 标记
  • 7
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值