一、前言

日常开发多人协作、内网项目代码托管,不想依赖 Gitee/GitHub 公网仓库,可基于 Linux 自带git+SSH 协议搭建私有 Git 服务器。采用系统用户 + ssh 鉴权,无需额外 Gitlab 重型软件,轻量化、部署简单、权限可控,适合中小企业内网小型代码仓库。


二、环境准备

系统:CentOS7/CentOS8,关闭防火墙或放行 22 端口 (SSH 默认端口)

1. 安装 git 依赖

bash

运行

yum install git -y
# 查看版本
git --version
2. 创建 git 专属系统用户(专门管理代码仓库,禁止登录 shell)

bash

运行

# -s /sbin/nologin 禁止ssh登录服务器系统,仅用作git传输
useradd -s /sbin/nologin git
# 可选设置密码(ssh密钥方式可不用密码)
passwd git
3. 创建仓库根目录

约定所有私有仓库统一放在 /home/git/git_repo/

bash

运行

mkdir -p /home/git/git_repo
chown git:git /home/git/git_repo


三、初始化空 Git 裸仓库(服务端必须裸仓 bare,无工作区)

裸仓库特点:只有版本索引数据,没有项目源码文件,专门用于远程 push/pull

bash

运行

# 切换到git用户操作
su -s /bin/bash git
# 创建项目demo.git仓库
cd /home/git/git_repo
git init --bare demo.git
# 权限自动归属git用户

四、客户端两种拉取推送方式

方式 1:账号密码 SSH 拉取(简易测试)

客户端电脑(Windows/Git Bash、Linux)克隆代码

bash

运行

git clone git@服务器IP:/home/git/git_repo/demo.git
# 新增文件提交推送
cd demo
echo "test code" > readme.md
git add .
git commit -m "first commit"
git push origin main
方式 2:SSH 免密密钥登录(生产推荐,无密码)
  1. 客户端生成密钥

bash

运行

ssh-keygen  #一路回车生成 ~/.ssh/id_rsa、id_rsa.pub
  1. 客户端公钥推送至 git 用户密钥文件

bash

运行

# 客户端执行,把公钥传到服务端git用户
ssh-copy-id git@服务器IP
  1. 再次 clone、push 无需输入密码


五、多项目新建仓库规范

每一个项目单独创建一个xxx.git裸仓

bash

运行

su -s /bin/bash git
cd /home/git/git_repo
git init --bare blog.git

六、避坑总结

  1. 服务端仓库必须git init --bare裸仓,普通仓库无法远程推送;
  2. git 用户/sbin/nologin不能改 shell,否则存在服务器登录安全风险;
  3. 目录权限异常:chown -R git:git /home/git/git_repo修复;
  4. 如需精细化权限(不同开发只能访问指定仓库),可搭配git-shell
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐