使用Gitolite搭建Git服务器

简介: Git 服务的管理工具,主要有如下几种。 Gitosis- 轻量级, 开源项目,使用 SSH 公钥认证,只能做到库级的权限控制。目前项目已经停止开发,不再维护。 Gitolite - 轻量级,开源项目

Git服务的管理工具,主要有如下几种。

  • Gitosis- 轻量级, 开源项目,使用SSH公钥认证,只能做到库级的权限控制。目前项目已经停止开发,不再维护。
  • Gitolite - 轻量级,开源项目,使用SSH公钥认证,能做到分支级的权限控制。
  • Git + Repo + Gerrit - 超级重量级,集版本控制,库管理和代码审核为一身。可管理大型及超大型项目。Android平台使用的就是这种方案。
  • GitLab-是GitHub的开源版本,使用和配置比较复杂,适合大型团队、资源密集型开发的管理工具

Gitolite使用perl语言编写,维护和更新比较积极,下面测试使用Gitolite搭建Git服务器。

Gitolite的安装

  • 新建用户Git服务器用户gitolite(用于存放管理Git公钥和仓库)
adduser gitolite
  • 使用gitolite用户登陆服务器
$ su - gitolite
密码:
  • 确保家目录~/.ssh/authorized_keys是空的或者不存在

一般新建用户~/.ssh/目录是不存在的。

  • 客户端生成ssh密钥,并将公钥上传到服务器的Gitolite用户家目录下
$ ssh-keygen -t rsa

生成路径会在ssh-kengen执行后给出,也可修改。windows下生成路径默认位于C:/user/用户名/.ssh下。

  • 上传客户端的公钥到gitolite用户家目录下
$ pscp C:/Users/win7hostsver/.ssh/id_rsa.pub gitolite@192.168.1.18:git1.pub
  • 在服务器端下载gitlite
git clone https://github.com/sitaramc/gitolite
  • 创建bin目录,并将gitolite安装到bin目录下
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
  • 将上传的公钥git1.pub设置为gitolite的超级管理员
$HOME/bin/gitolite setup -pk git1.pub
初始化空的 Git 仓库于 /home/gitolite/repositories/gitolite-admin.git/
初始化空的 Git 仓库于 /home/gitolite/repositories/testing.git/
WARNING: /home/gitolite/.ssh/authorized_keys missing; creating a new one
    (this is normal on a brand new install)

此时,gitolite会初始化两个仓库,同时创建authorized_keys文件

也可以将 gitolite命令路径加入到系统环境变量,这样可以在任何路径使用 gitolite
  • 客户端克隆授权管理仓库
$ git clone gitolite@192.168.1.18:gitolite-admin

管理库中有两个目录,conf/keydir/

  1. conf/gitolite.conf 用于Git项目配置,访问权限设置。
  2. keydir/ 用于存储用户的SSH public key(公钥)。

配置Git服务器的项目

添加新的Git项目仓库到本地

仓库的创建通过编辑gitolite-admin/conf/gitolite.conf即可,然后将配置后的文件上传服务器。

  • gitolite.conf中添加如下两行,新建一个repo1的仓库:
repo repo1
    RW+     =   @all
gitolite.conf管理仓库有三种权限, RW+、RW、R

权限可以赋值给@all所有有用户;或添加到\keydir\目录中的公钥对应的某一个用户(公钥文件的名字为RW+值)

git1.pub公钥文件,RW+ = git1

  • 添加并提交修改到gitolite-admin
 git add .
 git commit -m "added repo1 gave access to all"
[master 613f720] added repo1 gave access to all
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 推送到远程服务器,gitolite会在服务器创建对应的git仓库
 git push
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 703 bytes | 175.00 KiB/s, done.
Total 8 (delta 1), reused 0 (delta 0)
remote: 初始化空的 Git 仓库于 /home/gitolite/repositories/repo1.git/
To 192.168.1.22:gitolite-admin
   f68d497..613f720  master -> master
  • 服务器端repositories/仓库库目录下会多出一个空仓库repo1
$ ls -al repositories/
总用量 20
drwx------  5 gitolite gitolite 4096 5月   7 21:10 .
drwxr-xr-x 10 gitolite gitolite 4096 5月   7 21:10 ..
drwx------  8 gitolite gitolite 4096 5月   7 21:10 gitolite-admin.git
drwx------  7 gitolite gitolite 4096 5月   7 21:10 repo1.git
drwx------  7 gitolite gitolite 4096 5月   7 21:10 testing.git
  • 客户端直接克隆
$ git clone gitolite@192.168.1.22:repo1.git
Cloning into 'repo1'...
warning: You appear to have cloned an empty repository.

本地现有仓库添加到服务器

若本地已有仓库repo2,将其添加到服务器

  • gitolite.conf中配置仓库repo2
repo repo2
    RW+     =   git1
新用户要将其公钥添加到 /keydir目录
  • 添加、提交和push
git add .
git commit -m "added repo2 gave access to git1"
git push
  • 本地配置远程服务器
git remote add origin gitolite@192.168.1.22:repo2.git
  • 推送本地仓库
git push origin master

权限规则示例

repo foo
    RW+                     =   alice
    -   master              =   bob
    -   refs/tags/v[0-9]    =   bob
    RW                      =   bob
    RW  refs/tags/v[0-9]    =   carol
    R                       =   dave
  • alice对foo仓库有最高权限,创建、推送、删除、回退、覆写等
  • bob对非master开头的分支和非v+数字开头的标签进行创建和推送
  • carol能够创建以v+数字开头的标签。
  • dave可以克隆和fetch(拉取)

组groups管理

gitolite可以通过用户组的方式进行管理

gitolite.conf类似于变量的形式管理组,并且非常灵活
@admins     =   macken steven

@engineers = macken steven wally alice

@staff = @admins @engineers

@interns    =   ashok

repo secret
    RW      =   @staff

repo foss
    RW+     =   @admins
    RW      =   @interns
  • 同时可以使用正则对分支和标签进行匹配授权
RW int$ = @interns  # @interns组只对以“int”结尾的分支有创建和推送权限
RW eng- = @engineers    # @engineers组只对以“eng-”开头的分支有创建和推送权限
RW refs/tags/rc[0-9] = @engineers   # @engineers组只对以“rc[0-9]“开头的标签有创建和推送权限
RW+ = @admins   # @admins组则对仓库有最高权限

遇到的报错

$ git clone gitolite@192.168.1.18:gitolite-admin
Cloning into 'gitolite-admin'...
gitolite@192.168.1.18's password:
fatal: 'gitolite-admin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

如上提示,需要输入密码。
需要安装openssh,并将gitolite用户添加在sshusers组中,有的服务器可能是ssh组。

SSL(Secure Sockets Layer)安全套接字层,主要用来加密数据传输

SSH (Secure SHell)安全shell,实现对所有传输的数据进行加密。这样“中间人”攻击方式就不可能实现了,并且数据经过压缩,传输速度快。

openssh依赖于openssl,openssl是一个安全套接字层密码库,包括主要的密码算法、常用密钥和证书封装管理及SSL协议。

OpenSSH是SSH协议的实现,实现过程中,需要用到密钥交换算法,对称/非对称加密算法,Mac算法,随机数算法。会用到OpenSSL的libcrypto库{openssl还有libssl库}。

计算机领域的Cookbook指的是实用经典案例的意思,是对一些普遍性问题的解决方案的总结和整理。

参考

相关文章
|
2月前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
70 18
[Git] 深入理解 Git 的客户端与服务器角色
|
2月前
|
网络安全 Apache 开发工具
图解Git——服务器上的Git《Pro Git》
Git 远程仓库及通信协议简介:远程仓库为团队协作提供平台,支持共享代码。常见形式为裸仓库,仅保存 Git 元数据。Git 支持多种协议,包括本地协议(适合局域网)、HTTP/HTTPS(推荐智能 HTTP,安全易用)、SSH(企业内部协作首选)和 Git 协议(高效只读访问)。选择协议需根据协作需求、安全性和配置难度权衡。此外,搭建 Git 服务器涉及创建裸仓库、上传至服务器、初始化共享仓库等步骤。生成 SSH 公钥、配置服务器及使用 GitWeb 或 GitLab 等工具可进一步增强功能。第三方托管服务如 GitHub 提供便捷的托管选项,适合快速启动和开源项目。总结而言,自行运行服务器提
58 11
|
5月前
|
前端开发 开发工具 git
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
67 5
|
6月前
|
Linux 开发工具 数据安全/隐私保护
搭建 Git 私人服务器完整指南
本文详细介绍了如何从零开始搭建一个私人的 `Git` 服务器。首先,文章解释了 `Git` 的概念及其优势,并阐述了搭建私人 `Git` 服务器的重要性,包括数据隐私、定制化需求及成本效益。接着,文章分步骤指导读者完成服务器的准备工作,包括操作系统、硬件和网络要求。随后,详细介绍了在不同操作系统上安装 `Git` 的方法,并演示了如何创建 `git` 用户、部署仓库以及设置免密登录。此外,还提供了客户端连接远程仓库的具体步骤,包括 Linux 和 Windows 的操作方式。最后,文章探讨了迁移仓库的方法以及搭建 `Git` 服务器的一些进阶选项。
1172 0
搭建 Git 私人服务器完整指南
|
25天前
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
2天前
|
弹性计算 运维 监控
【阿里云】控制台使用指南:从创建ECS到系统诊断测评
本文介绍了如何通过阿里云获取ECS云服务器并进行操作系统配置与组件安装,以实现高效的资源管理和系统监控。阿里云凭借强大的基础设施和丰富的服务成为用户首选。文中详细描述了获取ECS、RAM授权、开通操作系统控制台及组件安装的步骤,并展示了如何利用控制台实时监控性能指标、诊断系统问题及优化性能。特别针对idle进程进行了深入分析,提出了优化建议。最后,建议定期进行系统健康检查,并希望阿里云能推出更友好的低成本套餐,满足学生等群体的需求。
51 17
【阿里云】控制台使用指南:从创建ECS到系统诊断测评
|
3天前
|
弹性计算 Linux 数据安全/隐私保护
阿里云幻兽帕鲁联机服务器搭建全攻略,速来抄作业!2025新版教程
阿里云提供2025年最新幻兽帕鲁服务器申请购买及一键开服教程。4核16G配置支持8人,70元/月;8核32G配置支持20人,160元/月。选择配置、地域、操作系统后,点击【一键购买及部署】,约3分钟完成创建。本地安装STEAM客户端并登录,进入游戏选择多人模式,输入服务器IP和端口(8211),即可开始游戏。详细教程及更多问题解答请参考阿里云幻兽帕鲁游戏专区。
43 20
|
2天前
|
存储 人工智能 运维
阿里云操作系统控制台——解决服务器磁盘I/O故障
阿里云操作系统控制台——解决服务器磁盘I/O故障
29 12
|
5天前
|
弹性计算 数据可视化 Linux
阿里云操作系统控制台——ECS操作与性能优化
本文详细介绍如何操作阿里云服务器ECS,从开通到组件安装及内存诊断。首先,通过选择操作系统(如Alibaba Cloud Linux 3)并开通服务,创建RAM用户并授予权限。接着,安装所需组件,支持节点或集群安装。最后,利用内存全景诊断功能,输入实例ID或Pod名称发起诊断并解析结果。这一流程帮助用户高效搭建计算环境,提升技术能力,确保业务稳定运行,并提出优化建议以改善用户体验。
58 8
|
5天前
|
弹性计算 运维 Cloud Native
阿里云虚拟主机、轻量应用服务器、云服务器、云·速成美站、云·原生建站区别及选择参考
在选择阿里云产品完整自己网站搭建的时候,面对云虚拟主机、轻量应用服务器、云服务器ECS、云·速成美站和云·原生建站等多种选择,很多用户不是很清楚他们之间的区别。每种产品都有其独特的优势和适用场景,如何根据自己的需求和技术背景选择最适合的建站产品,成为了用户关注的焦点。本文将详细比较阿里云这五种建站产品的优势和劣势,以及它们的适用人群,以供选择参考。