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 已经安装成功。
3. 创建项目
登录 GitLab,创建一个新的项目,用户名为root
。
获取登录密码:
sudo cat /etc/gitlab/initial_root_password
结果如下所示:
首次登录使用用户名root
:
4. 生成密钥对文件并获取公钥
安装 Git 工具(已安装跳过):
sudo apt-get install git
生成密钥对文件id_rsa
:
ssh-keygen
生成密钥对的过程中,系统会提示输入密钥对存放目录(默认为当前用户目录下的 .ssh/id_rsa,例如 /home/test/.ssh/id_rsa)和密钥对密码,您可以手动输入,也可以按 Enter 保持默认。
生成后,显示信息如下:
查看并复制公钥文件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" 选项:
之后继续点击 "Create blank project",设置 "Project name" 和 "Project URL",然后点击 "Create project":
- 本文以 mywork 项目为例进行说明。
6. 添加 SSH key
在当前 project 页面,点击 "Add SSH key":
将公钥文件id_rsa.pub
中的内容粘贴到Key
所在的文本框中:
点击 "Add key","SSH Key" 添加完成后,如下图所示:
复制 Clone 链接,该链接在进行克隆操作时需要使用:
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
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
✅ 在网页中查看上传的test.sh
文件已经同步到 GitLab 服务器中:
该命令执行完后需要执行git merge
远程分支到你所在的分支。
✅ 从远端仓库提取数据并尝试合并到当前分支:
git merge
该命令就是在执行git fetch
之后紧接着执行git merge
远程分支到你所在的任意分支。
假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行git fetch [alias]
告诉 Git 去获取它有你没有的数据,然后你可以执行git merge [alias]/[branch]
以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。
接下来我们在 Github 上点击" 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 仓库,可以看到文件已经提交上来了:
删除远程仓库
✅ 删除远程仓库你可以使用命令:
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)
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈