手搓一个极简远端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基本使用 -- 无敌牛

相关推荐
zzqssliu4 小时前
煤炉自动代拍系统的队列设计与超时控制机制
git·github
一支绝命钩4 小时前
FPGA工程Git常用操作手册
git
GetcharZp4 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
weixin_446260857 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
吳所畏惧8 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈8 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
不搞学术柒柒8 小时前
Git新功能完整开发提交流程
git
ttwuai9 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
用户8356290780519 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python