当前位置:首页 > 行业动态 > 正文

如何在本地搭建Git服务器?

搭建Git本地服务器需在主机安装Git,创建裸仓库(git init –bare),配置SSH或Git协议访问,通过SSH时,用户需配置公钥认证;使用HTTP则需启用Web服务器并设置智能HTTP,内网环境下可用git daemon快速启动简易只读仓库服务。

准备工作

  1. 选择服务器环境
    推荐使用Linux系统(Ubuntu/CentOS),确保稳定的网络环境。
    硬件要求:至少2GB内存,20GB存储空间(根据项目规模调整)。

  2. 安装必要依赖
    执行命令更新系统并安装基础工具:

    sudo apt-get update && sudo apt-get upgrade -y  # Ubuntu/Debian
    sudo yum update -y && sudo yum install -y curl wget  # CentOS

安装Git

  1. 通过包管理器安装
    Ubuntu/Debian:

    sudo apt-get install git -y

    CentOS:

    sudo yum install git -y
  2. 验证安装结果

    git --version  # 输出示例:git version 2.34.1

创建Git专用用户

  1. 新建系统用户

    sudo adduser git  # 按提示设置密码(可选禁用登录)
  2. 限制Shell访问
    修改/etc/passwd文件,将git用户的Shell替换为git-shell

    sudo usermod -s /usr/bin/git-shell git

初始化Git仓库

  1. 创建存储目录

    sudo mkdir -p /opt/git/project.git
    sudo chown git:git /opt/git/project.git
  2. 初始化裸仓库
    切换到git用户并初始化:

    sudo -u git git init --bare /opt/git/project.git

配置SSH访问

  1. 客户端生成密钥对
    在开发者电脑执行:

    ssh-keygen -t ed25519 -C "your_email@example.com"
  2. 服务器端授权密钥
    将客户端公钥(id_ed25519.pub追加到服务器文件:

    sudo su git
    mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys
    chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
    echo "公钥内容" >> ~/.ssh/authorized_keys

权限管理(高级配置)

  1. 仓库访问控制

    • 修改仓库所属用户组:
      sudo chown -R git:developers /opt/git/project.git
      sudo chmod -R 770 /opt/git/project.git
    • 通过gitolitegitlab实现细粒度权限管理(适合大型团队)。
  2. 钩子脚本(Hooks)
    /opt/git/project.git/hooks目录添加脚本,实现自动部署:

    # post-receive示例
    #!/bin/sh
    git --work-tree=/var/www/html checkout -f

客户端连接测试

  1. 克隆仓库

    git clone git@服务器IP:/opt/git/project.git
  2. 推送代码

    git remote add origin git@服务器IP:/opt/git/project.git
    git push origin main

维护与管理

  • 日志查看
    git log检查提交记录。
  • 仓库备份
    定期打包/opt/git目录并压缩存储。
  • 性能监控
    使用tophtop观察服务器资源占用。

常见问题

  • 连接被拒绝:检查SSH服务状态(sudo systemctl status sshd)及防火墙设置。
  • 权限错误:确认仓库目录权限和用户组配置。
  • 钩子不生效:确保脚本具有可执行权限(chmod +x post-receive)。

引用说明
本文参考Git官方文档、Linux用户管理指南及《Pro Git》技术手册编写。