Git与Gitlab

自动化运维

Git与gitlab的搭建

  • 自动化运维
  • 一、Git与Gitlab介绍
    • Git、Github、Gitlab 的区别
    • Git 与 SVN 区别
    • git 主要的工作区域
    • Git工作流程
  • 二、部署Git 服务
      • 安装
      • git安装后需配置用户相关信息
      • 查看已有的配置信息
      • 创建版本库
        • 方法一:在编写代码之前创建工程
        • 方法二:对已有文件的目录进行初始化
      • 查看 git 状态
      • 将目录下所有文件都添加到暂存区,只有当暂存区有文件才能commit
      • 删除暂存区的文件,相当于撤销刚才的 add 操作
    • commit提交到版本库
      • 查看版本库文件
      • 将文件从暂存区和本地一起删除
      • commit提交到版本库,彻底删除
      • 查看提交记录
      • 返回到init提交时的状态
      • 返回到最新的master状态
      • 在暂存区恢复已删除的文件
      • tag管理
      • 分支管理
  • 三、gitlab
      • 安装 docker
      • 拉取镜像
      • 由于容器也需要使用 22 端口,需要将容器所在主机的 ssh 服务端口改为 2222
      • 启动容器
  • 四、gitlab应用
    • 添加单个成员到项目中
    • 通过在群组中添加成员,加入到项目中
  • 对于没有创建过 git 版本库的主机
    • 对于已存在 git 版本库的主机
      • (1)使用 http 协议将本地软件项目代码推送到 git 服务器
      • (2)使用 ssh 免密推送代码

Git与Gitlab_第1张图片

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与Gitlab_第2张图片

二、部署Git 服务

安装

yum -y install git
git --version

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

#配置个人的用户名称和电子邮箱
git config --global user.name "lp"
git config --global user.email "[email protected]"

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

Git与Gitlab_第3张图片

查看已有的配置信息

git config --list

Git与Gitlab_第4张图片

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

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

创建版本库

方法一:在编写代码之前创建工程

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

ls -A /root/mypro/
.git

方法二:对已有文件的目录进行初始化

mkdir /root/myweb
cd !$
echo '

this is my web

'
> index.html git init 初始化空的 Git 版本库于 /root/myweb/.git/ ls -A .git index.html

Git与Gitlab_第5张图片

查看 git 状态

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

git status -s
?? index.html

Git与Gitlab_第6张图片

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

git add .

git status -s
A  index.html

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

Git与Gitlab_第7张图片

删除暂存区的文件,相当于撤销刚才的 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 ..." 撤出暂存区)
#
#	删除:      index.html
#

Git与Gitlab_第8张图片

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与Gitlab_第9张图片

查看提交记录

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

Git与Gitlab_第10张图片

返回到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
注:不建议在返回某个历史提交的状态后对数据做修改,以防数据紊乱

Git与Gitlab_第11张图片

返回到最新的master状态

git checkout master

ls     #此时 index.html 没有了

Git与Gitlab_第12张图片

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

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 ..." 撤出暂存区)
#
#	新文件:    hosts
#	新文件:    passwd
#	新文件:    shadow
#
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm ..." 更新要提交的内容)
#   (使用 "git checkout -- ..." 丢弃工作区的改动)
#
#	删除:      hosts
#	删除:      passwd
#	删除:      shadow
#


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

ls
hosts  passwd  shadow

Git与Gitlab_第13张图片

tag管理

可以给某一次提交打标记,如用于版本号
echo '

this is my web

'
> index.html git add . git commit -m "init" git tag 1.0 #将当前commit标记为1.0 git tag #查看所有的tag 1.0 echo '

hello world

'
>> 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与Gitlab_第14张图片

分支管理

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 ..." 以包含要提交的内容)
#
#	abc123.txt
#	mytest/
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

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

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

Git与Gitlab_第15张图片
Git与Gitlab_第16张图片
Git与Gitlab_第17张图片

三、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

Git与Gitlab_第18张图片

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

拉取镜像

docker pull twang2218/gitlab-ce-zh

Git与Gitlab_第19张图片

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

vim /etc/ssh/sshd_config
Port 2222

systemctl restart sshd

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

Git与Gitlab_第20张图片

启动容器

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

Git与Gitlab_第21张图片

四、gitlab应用

浏览器访问:http://192.168.100.150Git与Gitlab_第22张图片

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

2、使用管理员 root 用户登录(root/root@123),登录后点击页面上方的【扳手】图标进入“管理区域”
Git与Gitlab_第23张图片

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

3、创建名为 devops 的组
点击 【新建群组】
【群组路径】、【群组名称】、【描述】都设置成 devops
【可见等级】设置成 公开
其他都保持默认值,点击 【创建群组】
Git与Gitlab_第24张图片

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

创建好用户后再点击右上角的【编辑】,可在这里设置密码,,如 abc@1234
Git与Gitlab_第25张图片

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

添加单个成员到项目中

点击左边菜单【设置】->【成员】进入“项目成员”
【添加成员】中的【选择要邀请的成员】选择 kgc
【选择角色权限】选择 主程序员
点击 【添加到项目】
Git与Gitlab_第27张图片

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

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

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

Git与Gitlab_第28张图片

对于没有创建过 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与Gitlab_第29张图片
Git与Gitlab_第30张图片

对于已存在 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)

Git与Gitlab_第31张图片

#推送 tag 标记到远程仓库

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

Git与Gitlab_第32张图片

#刷新页面即可看到上传的代码和对应的 tag 标记
Git与Gitlab_第33张图片

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

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

ssh-keygen -t rsa -C “[email protected]” -b 4096 #一路回车
cat ~/.ssh/id_rsa.pub
Git与Gitlab_第34张图片

git@gitlab:devops/myweb.git

将公钥拷贝到网页中的公钥文本框中,再点击【增加密钥】
Git与Gitlab_第35张图片

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

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

#添加远程仓库上传代码方式
git remote add origin [email protected]:devops/myweb.git

git remote show origin

#推送测试
echo '

new line

'
>> index.html git add . git commit -m "modify index third" git push git push --tags #刷新页面即可看到上传的代码和对应的 tag 标记

你可能感兴趣的:(自动化运维,云计算,linux系统,git,svn,jenkins)