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

相关推荐
喝醉的小喵5 分钟前
分布式环境下的主从数据同步
分布式·后端·mysql·etcd·共识算法·主从复制
high201128 分钟前
【Git】-- 处理 Git 提交到错误分支的问题
git
雷渊28 分钟前
深入分析mybatis中#{}和${}的区别
java·后端·面试
我是福福大王32 分钟前
前后端SM2加密交互问题解析与解决方案
前端·后端
老友@1 小时前
Kafka 全面解析
服务器·分布式·后端·kafka
Java中文社群1 小时前
超实用!Prompt程序员使用指南,大模型各角色代码实战案例分享
后端·aigc
风象南1 小时前
Spring Boot 实现文件秒传功能
java·spring boot·后端
橘猫云计算机设计1 小时前
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·小程序·django·毕业设计
黑猫Teng2 小时前
Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南
java·spring boot·后端
小智疯狂敲代码2 小时前
Java架构师成长之路-框架源码系列-整体认识Spring体系结构(1)
后端