Git服务器搭建

Gitlab服务器概述

  • Gitlab是一个用于仓库管理系统的开源项目
  • 使用Git作为代码管理工具,并在此基础上搭建起来的web服务
  • Gitlab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发
  • 使用Ruby语言开发。后来,一部分用Go语言重写
  • Gitlab社区版是完全免费的,不但能建立免费的私有仓库而且没有数量上限,参与人员 有没有数量限制,还能设置成员权限

搭建本地gitlab服务器

  • 容器化部署gitlab
  • 导入中文版gitlab镜像
1
2
3
4
5
6
[root@node1 ~]$ yum install -y docker
[root@node1 ~]$ systemctl enable --now docker
[root@node1 ~]$ docker search gitlab
[root@node1 ~]$ docker pull 3456196521/gitlab-ce-zh
[root@node1 ~]$ docker images
docker.io/3456196521/gitlab-ce-zh 1.61 GB
  • 将物理主机ssh端口改为2022后,启动容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node1 ~]$ vim /etc/ssh/sshd_config 
Port 2022
[root@node1 ~]$ systemctl restart sshd
[C:\~]$ ssh 8.130.49.17 2022

[root@node1 ~]$ docker run -d -h gitlab --name gitlab \
-p 443:443 -p 80:80 -p 22:22 --restart always \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/data:/var/opt/gitlab \
3456196521/gitlab-ce-zh

[root@node1 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7720ffe5917 3456196521/gitlab-ce-zh "/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服务器

  • 当状态变为healthy时就可以使用浏览器访问本机IP
  • 密码需要大于8位

11.png

  • 修改密码后登录
  • 默认用户名为root

12.png

添加gitlab项目

  • 创建群组group

    使用群组管理项目和人员是非常好的方式

  • 创建项目project

    存储代码的地方,里面还包含问题列表、维基文档以及其他一些Gitlab功能

  • 创建成员member

    添加你的团队成员或其他人员到Gitlab

创建群组

13.png

14.png

创建项目

15.png

16.png

使用gitlab

用户管理

创建用户

17.png

18.png

  • 创建完用户,通过编辑设置密码

19.png

  • 把用户添加到devops组中
  • 进入devops组中操作

20.png

  • 进入项目可查看

21.png

  • 退出root使用普通用户登录
  • 第一次登录会让修改密码

代码管理

通过http协议上传代码

  • 将本地仓库推送至服务器
1
2
3
4
[root@node1 myweb]$ git remote add origin http://192.168.1.11/devops/myweb.git

[root@node1 myweb]$ git push -u origin --all
[root@node1 myweb]$ git push -u origin --tags
  • 添加新文件
1
2
3
4
[root@node1 myweb]$ echo '# this is a test' > hi.py
[root@node1 myweb]$ git add hi.py
[root@node1 myweb]$ git commit hi.py -m "新的测试"
[root@node1 myweb]$ git push origin master

下载代码

  • 下载代码到本地
1
2
3
4
[root@node1 ~]$ cd /opt/
[root@node1 opt]$ git clone
[root@node1 opt]$ ls myweb/
hi.py hosts passwd README.md
  • 更新代码到本地
1
2
[root@node1 myweb]$ git pull 
Already up-to-date.

配置免密登录

22.png

1
2
3
4
5
6
7
8
9
[root@node1 myweb]$ echo "good" >> README.md 
[root@node1 myweb]$ git add .
[root@node1 myweb]$ git commit -m "add line README"

[root@node1 myweb]$ git remote
origin
[root@node1 myweb]$ git remote remove origin
[root@node1 myweb]$ git remote add origion git@192.168.1.11:devops/myweb.git
[root@node1 myweb]$ git push -u origion --all

远程分支管理

远程仓库

远程仓库基础

  • 远程仓库是指托管在因特网或其他网络中的你的项目的版本库
  • 可以有多个远程仓库,通常有些仓库对你只读,有些则可读写
  • 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据
  • 管理远程仓库包括添加远程仓库、移除无效仓库、管理不同分支并定义它们是否被跟踪等待

查看远程仓库

  • 如果你已经克隆了仓库,那么至少因该能看到origin,这是Git给你克隆的仓库服务器的默认名字
1
2
3
4
5
6
7
8
9
[root@node1 /]$ git clone git@192.168.1.11:devops/myweb.git
[root@node1 /]$ cd myweb/
[root@node1 myweb]$ git remote
origin

[root@node1 myweb]$ git remote -v
origin git@192.168.1.11:devops/myweb.git (fetch)
origin git@192.168.1.11:devops/myweb.git (push)

添加远程仓库

  • 运行git remote add <shorname> <url>添加一个新的远程Git仓库
1
2
3
4
5
6
7
8
9
10
11
[root@node1 myweb]$ git remote
origion

[root@node1 myweb]$ git remote add pb https://github.com/paulboone/ticgit

[root@node1 myweb]$ git remote -v
origion git@192.168.1.11:devops/myweb.git (fetch)
origion git@192.168.1.11:devops/myweb.git (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)

  • 现在可以在命令行使用字符串pb来代替整个URL
  • 如果你想拉取仓库中有但你没有的信息,可以运行git fetch pb
1
2
3
4
5
6
7
8
9
10
[root@node1 myweb]$ git fetch pb
warning: no common commits
remote: Enumerating objects: 634, done.
remote: Total 634 (delta 0), reused 0 (delta 0), pack-reused 634
Receiving objects: 100% (634/634), 88.93 KiB | 0 bytes/s, done.
Resolving deltas: 100% (261/261), done.
From https://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit

从远程仓库fetch数据

  • git fetch <remote>这个命令会访问远程仓库,从中拉取所有你还没有的数据
  • 如果使用clone命令克隆了一个仓库,命令会自动将其添加为并默认以“origin”为简写。所以,git fetch origin会抓取克隆后推送的所有工作
  • git fetch命令只会将数据下载到你的本地数据库——它并不会自动合并或修改你的当前的工作

推送到远程仓库

  • 当你想分享你的项目时,必须将其推送到上游
  • 将master分支推送到origin服务器
1
2
[root@node1 myweb]$ git push origin master

查看远程仓库

  • 如果想要查看某一个远程仓库的更多信息,可以使用git remote show <remote>命令
1
2
3
4
5
6
7
8
9
10
11
[root@node1 myweb]$ git remote show origion 
* remote origion
Fetch URL: git@192.168.1.11:devops/myweb.git
Push URL: git@192.168.1.11:devops/myweb.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)

重命名远程仓库

  • 可以运行git remote rename来修改一个远程的简写名
  • 将pb重命名paul
1
2
3
4
5
6
7
8
[root@node1 myweb]$ git remote 
origion
pb

[root@node1 myweb]$ git remote rename pb paul
[root@node1 myweb]$ git remote
origion
paul
  • 那些过去引用pb/master的现在会引用paul/master

移除远程仓库

  • 可以使用git remote removegit remote rm
1
2
3
[root@node1 myweb]$ git remote remove paul 
[root@node1 myweb]$ git remote
origion

使用远程分支

远程分支

  • 远程引用是对远程仓库的引用(指针),包括分支、标签等等
  • 以通过git ls-remote <remote>获得远程引用的完整列表
  • 远程跟踪分支是远程分支状态的引用。它们是无法移动的本地引用
  • 一旦进行了网络通信,Git就会为你移动指针以精确反映远程仓库的状态

远程分支命名

  • 远程分支以<remote>/<branch>的形式命名,如origin/master
  • “origin”是当你运行git clone时默认的远程仓库名字
  • 远程仓库名字“origin”与分支名字“master”一样,在Git中并没有任何特别的含义

服务器与本地仓库

23.png

继续提交

24.png

推送分支

  • 运行git push <remote> <branch>
  • 推送本地serverfix分支到远程的serverfix分支
1
2
[root@node1 myweb]$ git push origin serverfix

跟踪分支

  • 从一个远程跟踪分支检出一个本地分支会自动创建所谓的“跟踪分支”
  • 它跟踪的分支叫做“上游分支”
  • 跟踪分支是与远程分支有直接关系的本地分支
  • 当克隆一个仓库时,它通常会自动的创建一个跟踪origin/mastermaster分支

拉取数据

  • git fetch命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后让你自己合并
  • git pull会查找当前分支所跟踪的服务器与分支,从服务器上抓取数据然后尝试合并入那个远程分支
  • 可以理解为git pull是一个git fetch紧接着一个git merge命令

删除远程分支

  • 如果想要从服务器上删除serverfix分支,运行
1
[root@node1 myweb]$ git push origin --delete serverfix