手搓一个极简远端git库

原文地址:手搓一个极简远端git库 -- 无敌牛

欢迎参观我的个人博客无敌牛 -- 技术/著作/典籍/分享等

问题分析

公司一直用 gitlab (或者 极狐 都是一样的)作为代码管理库,但是看了一些文章说代码最小的管理只需要 git 就可以了。那么 gitlab 和 git 到底是什么关系呢?就调研了一下。

原来,git 才是 Linus Torvalds 的杰作,而 gitlab 则是基于 git 开发的。以 git 为核心,又增加了一些权限管理验证、CI/CD、代码库管理、讨论、wiki等附加功能。那么,想做一个 极简的 代码库管理平台,只需要一个 git 工具,可不可以实现呢?完全可以!准确的说,git + openssh-server 可以实现。为什么需要 openssh-server 呢?因为 git 登录认证 默认依赖 ssh 登录,恐怕也极少有服务器不装 openssh-serveropenssh-server 就是 sshd) 的吧。

搭建和测试

方案说明:

1、准备两个设备 A 和 B(一台也可以,即做服务端 也做客户端),在设备上安装 git 和 openssh-server;对应下文中第一步

2、在 A 创建 git 代码平台库 taa.git,使用的账户是 lclgit ;对应下文中第二、三步

3、然后在 A 设备添加 B 设备某个用户(此用户简称 Buser,可以使用任何一个账户,例如 root 就可以)的免密登录,使 B 设备的用户 Buser 可以使用自己的密钥免密登录 A 设备上的 lclgit 用户;对应下文中第四步

4、在 B 设备做拉取代码,上传,更新等测试。对应下文中第五步

第一步、安装必要软件

安装 openssh-server 和 git。只要 sshd 能登陆,就说明,不需要再安装 openssl-server。直接安装 git 就可以了。

以 Debian 打包系列的 linux 系统为例:apt install git openssh-server

第二步、创建用户

本次示例创建用户 lclgit ,并指定 lclgit 用户的 home 目录为:/tgit/lclgit/

执行指令:adduser --system --shell /bin/bash --group --disabled-password --home /tgit/lclgit/ lclgit

第三步、创建仓库

此步骤的目标:创建 taa.git 代码库。可以先切换到 lclgit 用户再执行这一步的操作,这样避免了一些文件权限处理。

/tgit/lclgit 目录下依次执行指令:

切换到 lclgit 用户:su - lclgit -s /bin/bash

创建 taa.git 目录,这个会作为代码库:mkdir taa.git

初始化 taa.git 代码库:git init --bare taa.git/

到此,命名为 taa.git 的代码库 git 库就建立完成了。

第四步、添加ssh免密登录

这一步完全就是设置免密登录 lclgit 账户的,和 git 本身没有关系。获取客户端的 某用户的 公钥,一般在 ~/.ssh/id_rsa.pub,没有的化使用 ssh-keygen 创建即可。将其写入到 A 设备的 /tgit/lclgit/.ssh/authorized_keys 文件就可以了。

第五步、测试

拉取 taa.git 库,测试能不能修改、提交、推送。

换个开发目录,看看是否能同步、修改、提交、推送,并切换回原来的开发目录,测试能否成功拉取已经修改的内容。


关于git的基本使用,参看往期文章:git基本使用 -- 无敌牛

相关推荐
时韵瑶29 分钟前
Scala语言的云计算
开发语言·后端·golang
卷卷的小趴菜学编程33 分钟前
c++之List容器的模拟实现
服务器·c语言·开发语言·数据结构·c++·算法·list
艾杰Hydra36 分钟前
LInux配置PXE 服务器
linux·运维·服务器
Jerry Lau39 分钟前
大模型-本地化部署调用--基于ollama+openWebUI+springBoot
java·spring boot·后端·llama
多恩Stone39 分钟前
【ubuntu 连接显示器无法显示】可以通过 ssh 连接 ubuntu 服务器正常使用,但服务器连接显示器没有输出
服务器·ubuntu·计算机外设
幼儿园老大*44 分钟前
【系统架构】如何设计一个秒杀系统?
java·经验分享·后端·微服务·系统架构
fmdpenny1 小时前
Django的安装
后端·python·django
牙牙7051 小时前
ansible一键安装nginx二进制版本
服务器·nginx·ansible
计算机-秋大田1 小时前
基于SSM的家庭记账本小程序设计与实现(LW+源码+讲解)
java·前端·后端·微信小程序·小程序·课程设计
Code侠客行1 小时前
Scala语言的循环实现
开发语言·后端·golang