原文地址:手搓一个极简远端git库 -- 无敌牛
欢迎参观我的个人博客:无敌牛 -- 技术/著作/典籍/分享等
问题分析
公司一直用 gitlab (或者 极狐 都是一样的)作为代码管理库,但是看了一些文章说代码最小的管理只需要 git 就可以了。那么 gitlab 和 git 到底是什么关系呢?就调研了一下。
原来,git 才是 Linus Torvalds 的杰作,而 gitlab 则是基于 git 开发的。以 git 为核心,又增加了一些权限管理验证、CI/CD、代码库管理、讨论、wiki等附加功能。那么,想做一个 极简的 代码库管理平台,只需要一个 git 工具,可不可以实现呢?完全可以!准确的说,git + openssh-server 可以实现。为什么需要 openssh-server
呢?因为 git 登录认证 默认依赖 ssh 登录,恐怕也极少有服务器不装 openssh-server
( openssh-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基本使用 -- 无敌牛