当前位置: 首页 > news >正文

git-在ubuntu/debian搭建简易的git服务器

安装git

sudo apt-get update 
sudo apt-get install git -y

创建一个git用户并建立一个 .ssh 目录和验证文件:

sudo adduser git
su git
cd
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys # ssh用户验证

然后将ssh公钥添加到authorized_keys文件中,一行一个

配置用户登陆权限

公钥添加成功后,用户可以通过ssh直接登陆git用户的shell,为了防止这个问题,我们需要限制git用户登陆

git提供了一个名为git-shell 的工具,你可以方便地将用户 git 的活动限制在与 Git 相关的范围内。

如果将 git-shell 设置为用户 git 的登录 shell(login shell), 那么该用户便不能获得此服务器的普通 shell 访问权限。 若要使用 git-shell,需要用它替换掉 bash 或 csh,使其成为该用户的登录 shell。 为进行上述操作,首先你必须确保 git-shell 的完整路径名已存在于 /etc/shells 文件中:

cat /etc/shells   # 查看列表
which git-shell   # 检测git-shell安装
sudo -e /etc/shells  # 将上面的结果添加到这里的末尾

现在你可以使用 chsh <username> -s <shell> 命令修改任git用户的 shell:

sudo chsh git -s $(which git-shell)

这样,用户 git 就只能利用 SSH 连接对 Git 仓库进行推送和拉取操作,而不能登录机器并取得普通 shell。

su git # 尝试进入git用户shell
或
ssh git@yourserver

显示下面 内容表示成功

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
注意,这样只是禁止了git用户的shell访问,并不会阻止访问git相关的服务

添加项目

创建一个空目录作为git服务器的根路径:

sudo mkdir /git

授予git用户所有权

sudo chown -R git:git /git

从服务器上创建空项目仓库

cd /git
mkdir yourprojectname.git
cd yourprojectname.git
git init --bare
# Initialized empty Git repository in /git/yourprojectname.git/

本地项目创建空项目仓库

git clone --bare my_project_apth my_project_apth.git

这样会在当前路径创建一个 my_project_apth.git的空仓库

然后将这个仓库上传到服务器

scp -r my_project_path.git root@gitserver:/git/

注意使用非root用户上传可能需要授予可写权限

 

上传本地代码 

cd my_project_path
git init
git add .
git commit -m 'initial commit'
git remote add origin git@gitserver:/git/yourprojectname.git #刚才的git地址
git push origin master

测试:

git clone git@gitserver:/git/yourprojectname.git
or
git pull git@gitserver:/git/yourprojectname.git

相关文章:

  • ESP32驱动OV3660摄像头实现yoloV5物体分类(摄像头支持红外夜视、边缘AI计算)
  • Axure常用变量及使用方法详解
  • 2-kafka集群环境搭建
  • 循环神经网络(RNN):时序建模的核心引擎与演进之路
  • 特征表示深度解析:颜色、纹理、形状与编码
  • 容器编排革命:从 Docker Run 到 Docker Compose 的进化之路20250309
  • PiscTrace以YOLOv12为例定义兴趣区域提高识视图别效率
  • 在 Windows 上安装和配置 Poetry
  • leecode练习-数组-3.9
  • 慕慕手记项目日记 熟悉SQLAIChemy ORM框架 2025-3-5
  • 软件开发过程总揽
  • 利用LLMs准确预测旋转机械(如轴承)的剩余使用寿命(RUL)
  • 如何将本地已有的仓库上传到gitee (使用UGit)
  • UML面向对象建模与设计 读书笔记
  • Python 数据可视化创意分享:解锁数据之
  • PCIe协议之RCB、MPS、MRRS详解
  • Mysql配置文件My.cnf(my.ini)配置参数说明
  • 一周学会Flask3 Python Web开发-使用SQLAlchemy动态创建数据库表
  • Elastic:AI 会开始取代网络安全工作吗?
  • uniapp,自绘仪表盘组件(基础篇)
  • 《掩耳盗邻》:富人劫富,是犯罪,也是赎罪?
  • 15年全程免费,内蒙古准格尔旗实现幼儿园到高中0学费
  • 首届中国人文学科年度发展大会启幕,共话AI时代人文使命
  • 秦洪看盘|风格有所转变,热钱回流高弹性品种
  • 媒体评欧阳娜娜遭民进党当局威胁:艺人表达国家认同是民族大义
  • 诠释微末处的丰盈:“上海制造佳品汇”首届海外专场即将亮相日本大阪