Git私服的搭建记录
# 前言
之前一直有想法搭建一个私服,当时主要看到普遍采取的解决方案是 Gitlab,然而启动该项目需要至少 4G 的内存,这对于服务器资源有限的人来说,十分不友好,并且 Gitlab 的管理功能基本是针对团队场景开发的,对于个人而言有些杀鸡牛刀了。
于是,便找到了另外一个方案,直接通过 Git 创建裸仓库(bare repo)。然后通过 SSH 的方式进行代码传输。该方案虽然简单,但是对于个人用户的小型服务器十分友好。
# 前提
- 服务器一台
# 步骤
首先是在服务器安装 Git。主流 Linux 发行版基本都可以通过原生的包管理器获取,这里不过多介绍,下载安装之后通过
git --version
检查是否成功安装即可。随后创建一个非 sudo 组的新用户专门用于存储 Git 远程仓库。这样会比较安全,即使你只是一个人使用,但万一呢,如果你实在不想创建,则可以直接到步骤 3。
# 创建 git 用户
sudo useradd git
# 给 git 用户设置一个密码
sudo passwd git
2
3
4
- 创建服务端的 Git bare repo。
# 切换到 git 用户
su git
# 进入到 git 的 home 目录
cd ~
# 创建一个文件夹用做仓库
mkdir repo_name.git
# 进入到该仓库
cd repo_name.git
# 初始化为裸仓库(只包含.git下的内容)
git init --bare
2
3
4
5
6
7
8
9
10
如果你需要将 bare repo 的默认分支切换为 main,可以使用 git symbolic-ref HEAD refs/heads/main
。普通仓库类型设置默认分支比较简单,可以自行百度或者参考以下链接。
- 通过以上命令,你已经成功创建了一个远程仓库!现在你需要让用户能够 SSH 到该用户,你需要完成以下操作:
# 本地创建 SSH 密钥,如果有可以跳过
ssh-keygen
# 拷贝本地的公钥,通常是在用户目录下的 .ssh/id_rsa.pub
# 复制该公钥到服务器的 git 用户的家目录下的 .ssh/authorized_keys 中
# 通常情况这个文件夹(.ssh)和文件(authorized_keys)是不存在的,需要你自己创建
2
3
4
5
6
在完成上述步骤后,你就已经完成了全部绝大部分工作了!现在分为两种情况。
- 第一种为你已经有一个本地仓库了,你只想 push 本地仓库到这个远程仓库,那么你只需要绑定远程仓库即可,例如
git remote add origin git@ip:repo_name.git
。 - 第二种情况就是你没有本地仓库,那么你仅仅只需要通过
git clone git@ip:repo_name.git
即可拷贝空项目至本地并建立本地仓库与远程仓库的关联了。
- 第一种为你已经有一个本地仓库了,你只想 push 本地仓库到这个远程仓库,那么你只需要绑定远程仓库即可,例如
由于之前我们是直接将项目放在 git 用户的家目录下,因此这里没有涉及到相对路径,如果你的项目是在 git 用户目录下的子目录中,那么则可以改为 git 目录下的相对路径。例如仓库保存至服务端的 /home/git/repo/repo_name.git
,那么上述的 clone 或者 remote 之后的路径就是 repo/repo_name.git
# 最后
稍微解释以下 bare repo。其实就是在普通仓库下的 .git 目录已经包含了 git 需要的全部信息,包括代码。这些信息会被压缩打包保存 .git 目录中,只不过没有项目结构那么直观。
因此对于服务端而言,保存为 bare repo,然后每次 push 至该仓库都只是重新生产 .git 目录下的文件并上传至服务端的 repo_name.git 目录中。
Enjoy the Git。