主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

Git 服务器搭建

上一章节中,我们使用 GitHub 作为远程仓库。GitHub 的公开项目一直是免费的,而自 2019 年起,GitHub 还开始提供不限数量的私有存储库支持,允许用户免费创建和管理私有项目。

当然,除了使用 GitHub 这样的托管平台,我们也可以自行搭建 Git 服务器。


使用裸存储库搭建 Git 服务器

裸存储库(Bare Repository)是 Git 服务器常用的存储形式,它不包含工作目录(即没有可编辑的文件),仅用于存储 Git 的版本历史和数据。这使得它非常适合作为中央代码仓库,供多个开发者推送(push)和拉取(pull)代码。

以下是裸存储库的典型目录结构图及说明:

project.git/              # 裸仓库根目录(通常以 .git 结尾)
├── HEAD                  # 当前所在的分支(如 ref: refs/heads/main)
├── config                # 仓库配置文件(远程地址、分支设置等)
├── description           # 仓库描述文件(仅供 GitWeb 使用)
├── hooks/                # Git 钩子脚本目录(pre-push, post-receive 等)
│   ├── pre-commit.sample
│   ├── pre-push.sample
│   └── ...
├── info/                 # 附加信息目录
│   └── exclude           # 本地忽略规则(类似 .gitignore,但不上传)
├── objects/              # Git 对象数据库(核心数据存储)
│   ├── pack/             # 打包的压缩对象(优化存储)
│   └── ...               # 松散对象(未打包的 commit/tree/blob)
└── refs/                 # 引用(分支和标签指针)
    ├── heads/            # 分支引用(如 main、develop)
    │   ├── main
    │   └── ...
    └── tags/             # 标签引用(如 v1.0.0)

1. 安装 Git

Ubuntu 服务器上安装 Git:

sudo apt install git

如果你使用的系统是 Centos/RedHat 安装命令为:

yum -y install git-core

Fedora 安装命令:

# yum install git (Fedora 21 及之前的版本)
# dnf install git (Fedora 22 及更高新版本)

接下来我们 创建一个 git 用户组和用户,用来运行 Git 服务:

$ groupadd git
$ useradd git -g git

2. 创建裸存储库

登录到 Git 用户,然后在其 home 目录下创建一个裸存储库:

$ sudo su - git

首先我们选定一个目录作为 Git 仓库,假定是/home/gitrepo/runoob.git,在/home/gitrepo目录下输入命令:

$ cd /home
$ mkdir gitrepo
$ chown git:git gitrepo/
$ cd gitrepo

$ git init --bare kaicz.git

以上命令 Git 创建一个空仓库,服务器上的 Git 仓库通常都以.git结尾。然后,把仓库所属用户改为 git(如果是其他用户操作,比如 root):

$ chown -R git:git kaicz.git

3. 创建证书登录

将你的公钥添加到~/.ssh/authorized_keys中,允许远程访问。

收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

如果没有该文件创建它:

$ cd /home/git/
$ mkdir .ssh
$ chmod 755 .ssh
$ touch .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys
# 在文件中添加你的 SSH 公钥

4. 克隆仓库

$ git clone git@192.168.45.4:/home/gitrepo/kaicz.git
Cloning into 'kaicz'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

192.168.45.4 为 Git 所在服务器 ip ,你需要将其修改为你自己的 Git 服务 ip。

这样我们的 Git 服务器安装就完成。


GitLab 安装配置

GitLab 是一个功能强大的 Git 服务管理工具,适合中大型团队,提供了丰富的用户管理、CI/CD、代码审查等功能。

1. 安装 GitLab

根据 GitLab 官方文档 安装 GitLab。

例如,在 Ubuntu 上:

# sudo apt-get update
# sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
# sudo EXTERNAL_URL="http://yourdomain" apt-get install gitlab-ee

EXTERNAL_URL="http://yourdomain" 要设置自己的域名,或者公网 IP,比如:

sudo EXTERNAL_URL=101.132.XX.XX yum install -y gitlab-ee

2. 配置 GitLab

安装完成后,打开浏览器访问 http://yourdomain,设置管理员账户。

当出现类似如下回显信息,表示 GitLab 已经安装成功。

GitLab 安装

3. 创建项目

登录 GitLab,创建一个新的项目,用户名为root

获取登录密码:

sudo cat /etc/gitlab/initial_root_password

结果如下所示:

GitLab 注册

首次登录使用用户名root

GitLab 登录

4. 生成密钥对文件并获取公钥

安装 Git 工具(已安装跳过):

sudo apt-get install git

生成密钥对文件id_rsa

ssh-keygen

生成密钥对的过程中,系统会提示输入密钥对存放目录(默认为当前用户目录下的 .ssh/id_rsa,例如 /home/test/.ssh/id_rsa)和密钥对密码,您可以手动输入,也可以按 Enter 保持默认。

生成后,显示信息如下:

GitLab 生成秘钥

查看并复制公钥文件id_rsa.pub中的内容:

cat .ssh/id_rsa.pub

显示类似如下的信息:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQVwWjF3KXmI549jDI0fuCgl+syJjjn55iMUDRRiCd/B+9TwUda3l9WXH5i7RU53QGRCsDVFZxixLOlmXr9E3VSqkf8xXBnHs/5E2z5PIOCN0nxfB9xeA1db/QxPwK4gkHisep+eNHRn9x+DpCYDoSoYQN0nBg+H3uqfOqL42mJ+tqSfkyqbhjBf1kjtDTlBfVCWtI0siu7owm+c65+8KNyPlj5/0AyJ4Aqk1OX2jv+YE4nTipucn7rHwWuowasPU86l+uBsLNwOSb+H7loJvQyhEINX2FS1KnpRU+ld20t07n+N3ErfX5xBAGfxXpoN9BKKSP+RT7rvTeXTVE**** test@kaicz.com****

5. 创建项目

在 GitLab 的主页中,点击 "Create a project" 选项:

GitLab 创建项目

之后继续点击 "Create blank project",设置 "Project name" 和 "Project URL",然后点击 "Create project":

GitLab 填写项目信息

  • 本文以 mywork 项目为例进行说明。

6. 添加 SSH key

在当前 project 页面,点击 "Add SSH key":

GitLab 添加 SSH key

将公钥文件id_rsa.pub中的内容粘贴到Key所在的文本框中:

GitLab 粘贴公钥

点击 "Add key","SSH Key" 添加完成后,如下图所示:

GitLab SSH Key 添加完成

复制 Clone 链接,该链接在进行克隆操作时需要使用:

GitLab 链接克隆


GitLab 使用流程

1. 配置使用 Git 仓库的人员信息,包含用户名和邮箱:

git config --global user.name "testname"
git config --global user.email "abc@example.com"

2. 克隆已创建的项目到本地:

git clone git@101.132.XX.XX:root/mywork.git

GitLab 克隆项目

3. 上传文件到 GitLab 服务器:

✅ 进入到项目目录:

cd mywork/

✅ 创建需要上传到 GitLab 中的目标文件:

echo "test" > /home/test/test.sh

✅ 将目标文件或者目录复制到项目目录下:

cp /home/test/test.sh ./

✅ 将 test.sh 文件加入到索引中:

git add test.sh

✅ 将 test.sh 提交到本地仓库:

git commit -m "test.sh"

✅ 将文件同步到 GitLab 服务器上:

git push -u origin main

将文件同步到 GitLab 服务器

✅ 在网页中查看上传的test.sh文件已经同步到 GitLab 服务器中:

GitLab 服务器查看

该命令执行完后需要执行git merge远程分支到你所在的分支。

✅ 从远端仓库提取数据并尝试合并到当前分支:

git merge

该命令就是在执行git fetch之后紧接着执行git merge远程分支到你所在的任意分支。

假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行git fetch [alias]告诉 Git 去获取它有你没有的数据,然后你可以执行git merge [alias]/[branch]以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。

接下来我们在 Github 上点击" README.md" 并在线修改它:

README.md

然后我们在本地更新修改。

$ git fetch origin
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:tianqixin/kaicz-git-test
   0205aab..febd8ed  master     -> origin/master

以上信息"0205aab..febd8ed master -> origin/master" 说明 master 分支已被更新,我们可以使用以下命令将更新同步到本地:

$ git merge origin/master
Updating 0205aab..febd8ed
Fast-forward
 README.md | 1 +
 1 file changed, 1 insertion(+)

查看 README.md 文件内容:

$ cat README.md
# 开创者教程 Git 测试
## 第一次修改内容

推送到远程仓库

✅ 推送你的新分支与数据到某个远端仓库命令:

git push [alias] [branch]

✅ 以上命令将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支,实例如下:

$ touch kaicz-test.txt      # 添加文件
$ git add kaicz-test.txt
$ git commit -m "添加到远程"
master 69e702d] 添加到远程
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 kaicz-test.txt

$ git push origin master    # 推送到 Github

✅ 重新回到我们的 Github 仓库,可以看到文件已经提交上来了:

touch kaicz


删除远程仓库

✅ 删除远程仓库你可以使用命令:

git remote rm [别名]

✅ 实例演示:

$ git remote -v
origin    git@github.com:tianqixin/kaicz-git-test.git (fetch)
origin    git@github.com:tianqixin/kaicz-git-test.git (push)

# 添加仓库 origin2
$ git remote add origin2 git@github.com:tianqixin/kaicz-git-test.git

$ git remote -v
origin    git@github.com:tianqixin/kaicz-git-test.git (fetch)
origin    git@github.com:tianqixin/kaicz-git-test.git (push)
origin2    git@github.com:tianqixin/kaicz-git-test.git (fetch)
origin2    git@github.com:tianqixin/kaicz-git-test.git (push)

# 删除仓库 origin2
$ git remote rm origin2
$ git remote -v
origin    git@github.com:tianqixin/kaicz-git-test.git (fetch)
origin    git@github.com:tianqixin/kaicz-git-test.git (push)


评论区 0
发表评论