Linux下搭建Git服务器

news2024/11/17 19:51:25

目录

步骤一.安装Git:

步骤二.安装Gitosis

安装Gitosis依赖的工具

进入到Gitosis目录执行:

出现下面的信息表示安装成功

步骤三.服务器端创建git用户来管理Git服务

服务器端的Git配置公钥

步骤四.服务器端创建Git仓库

步骤五.客户端clone服务器端git仓库

1、在客户端创建本地仓库

2、客户端创建公钥和私钥

步骤六.服务器Git打开RSA认证

1、修改sshd_config文件配置

2、重启sshd服务 

3、在客户端Git Bash 下导入文件

4、设置权限

步骤七.禁止Git用户通过ssh登录服务器

步骤八.客户端测试clone服务器端仓库

git init 和 git init --bare的区别

git init --bare 的特点

git init 的特点

git init容易产生冲突的地方

管理公钥


步骤一.安装Git:

#通过yum安装Git
yum install -y git

#查看Git版本(确认是否安装成功):
git --version

步骤二.安装Gitosis(不需要使用Gitosis的可以跳过此步骤)

我将Gitosis安装到在 /opt目录下了,Linux:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。当然也可以根据自己习惯,决定安装到那个目录。

git clone https://github.com/res0nat0r/gitosis.git

执行:git clone https://github.com/res0nat0r/gitosis.git 命令遇到的错误

  • 错误提示:fatal: unable to access 'https://github.com/res0nat0r/gitosis.git/': Encountered end of file 的错误,下面说一下解决方法。

第一种方法:依次执行下面的命令

  • git config --global --unset http.proxy
  • git config --global --unset https.proxy

第二种方法:尝试将目标地址中的 https 改为 git

如果以上两种方式还是不行,那就还使用原命令多尝试克隆几次。我都尝试了好几次,才clone下来

  • 安装Gitosis依赖的工具

yum install python-setuptools -y
  • 进入到Gitosis目录执行:

sudo python setup.py install
  • 出现下面的信息表示安装成功

步骤三.服务器端创建git用户来管理Git服务

#查看Git用户是否存在
[root@wpl gitosis]# id git 
id: git: no such user        提示没有这样的用户

#创建Git用户(用来运行git服务)
[root@wpl gitosis]# useradd git

#给Git用户设置密码
[root@wpl gitosis]# echo "123" | passwd --stdin git
Changing password for user git.
passwd: all authentication tokens updated successfully.

#切换到Git用户下
[root@wpl gitosis]# su - git

  • 服务器端的Git配置公钥

在Windows上配置管理者,git服务器需要一些管理者,通过上传开发者机器的公钥到服务器,添加成为git服务器的管理者,打开git命令行

  • 生成rsa证书文件
[git@wpl ~]$ ssh-keygen -t rsa

执行完 :ssh-keygen -t rsa 结果如下图所示

步骤四.服务器端创建Git仓库

1、设置 /home/git/test.git 为 Git 仓库

git init --bare ./test.git

 

2、然后把 Git 仓库的 owner(拥有者) 修改为 git用户,执行命令:

chown -R git:git test.git/

步骤五.客户端clone服务器端git仓库

  • 1、在客户端创建本地仓库

  1. 例如我的本地仓库设置在:D:\PhpStudyV8\phpstudy_pro\git-one 目录
  2. 通过Git Bash 进入到D:\PhpStudyV8\phpstudy_pro\git-one 目录中
  3. 在D:\PhpStudyV8\phpstudy_pro\git-one目录中的操作如下
#执行 git init 命令初始化本地仓库
EDZ@WINDOWS-6INDESP MINGW64 /d/PhpStudyV8/phpstudy_pro/git-one
$ git init
Initialized empty Git repository in D:/PhpStudyV8/phpstudy_pro/git-one/.git/

#执行 clone 命令,克隆服务器端的仓库
#10.10.10.68是服务器的ip
#/home/git/test.git 是服务器端仓库的路径
EDZ@WINDOWS-6INDESP MINGW64 /d/PhpStudyV8/phpstudy_pro/git-one (master)
$ git clone git@10.10.10.68:/home/git/test.git

#当第一次连接到目标 Git 服务器时会提示
Cloning into 'test'...
The authenticity of host '10.10.10.68 (10.10.10.68)' can't be established.
ED25519 key fingerprint is SHA256:DSWcndKXrWJcGFVHIgiMKg9RBc9JHyqMI6R/eCchszw.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

#输入:yes 会提示
Warning: Permanently added '10.10.10.68' (ED25519) to the list of known hosts.
git@10.10.10.68's password:

此时 C:\Users\用户名\.ssh 下会多出一个文件 known_hosts文件,以后在这台电脑上再次连接目标 Git 服务器时不会再提示上面的语句。

【说明】

  1. 如果你的服务器没有配置SSH连接,那么按照正常情况会让你输入git用户的密码,输入正确后就能进行项目克隆了。
  2. 如果不采用 SSH 公钥来进行验证,则每次都要输入密码,很麻烦,下面就来配置SSH公钥验证的方式来clone项目 
  • 2、客户端创建公钥和私钥

ssh-keygen -t rsa -C "123456@163.com"

执行过程如下图所示

此时 C:\Users\用户名\.ssh 下会多出两个 id_rsa(私钥)和 id_rsa.pub(公钥) 文件

步骤六.服务器Git打开RSA认证

  • 1、修改sshd_config文件配置

进入 /etc/ssh 目录,编辑sshd_config,查看以下三个配置是否被注释或者存在。不存在的给添加上,被注释的,就取消注释。最后 :wq 保存并退出

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
  • 2、重启sshd服务 

service sshd restart

sshd的相关操作命令:

  1. systemctl status sshd.service  #查看ssh服务状态
  2. systemctl start sshd.service    #开启ssh服务
  3. systemctl enable sshd.service #设置ssh服务开机自启

由 【AuthorizedKeysFile】配置项,得知公钥的存放路径是 .ssh/authorized_keys,由于管理 git 服务的用户是 git,所以实际存放公钥的路径是 /home/git/.ssh/authorized_keys

  • 3、在客户端Git Bash 下导入文件

将客户端公钥导入服务器端 /home/git/.ssh/authorized_keys 文件中,执行:

#执行命令ssh git@服务器公网IP地址 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
EDZ@WINDOWS-6INDESP MINGW64 /d/PhpStudyV8/phpstudy_pro/git-one (master)
$ ssh git@10.10.10.68 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

#提示输入密码,这里输入服务器端创建git用户时,给Git用户设置的密码即可(123)
git@10.10.10.68's password:

再次查看 服务器:/home/git/.ssh 目录,就会发现多了一个authorized_keys文件 

  • 4、设置权限

设置权限步骤不能省略,而且权限值也不要改,不然会报错。 

chmod 700 /home/git/.ssh/

chmod 600 /home/git/.ssh/authorized_keys

步骤七.禁止Git用户通过ssh登录服务器

在【步骤四】中创建的Git用户,是可以通过ssh直接登陆服务器的。这样对服务器而言,就不安全了,所以咱们要禁止Git用户登录。

vim /etc/passwd

找到:git:x:1001:1001::/home/git:/bin/bash

修改为:git:x:1001:1001::/home/git:/bin/git-shell

此时 git 用户可以正常通过 ssh 使用 git,但无法通过 ssh 登录系统。

步骤八.客户端测试clone服务器端仓库

EDZ@WINDOWS-6INDESP MINGW64 /d/PhpStudyV8/phpstudy_pro/git-one (master)
$ git clone git@10.10.10.68:/home/git/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.

这次克隆发现没有提示:是否需要继续链接,也没有提示让输入密码,直接就成功了。

git init 和 git init --bare的区别

 大家都知道,初始化仓库的命令是:git init,但是这里初始化仓库的命令是 git init --bare。这两者的区别

        git init 创建的工作仓库(working repository)适合于实际编辑生产过程中,在工作目录下,你将可以进行实际的编码、文件管理操作和保存项目在本地工作。如果你开始创建一个项目将包含有源代码和版本跟踪记录的时候你可以使用”git init”,如果你克隆”git clone”一个已经存在的版本库的时候,你也可以得到一个working repository,它也将包含”.git”目录和源文件的拷贝。(也就是说,在远程仓库上,代码是否需要编辑和执行,如果需要执行,就使用git init)

        git init --bare创建的裸仓库(bare repository)主要是用作分享版本库。开发者使用bare repository可以向其他人分享存储在本地的版本库,以便于实时分享代码更新和团队协作 。通过使用”git push”命令,你可以将你的本地更新提交至“中心版本库”(其他开发者可访问的中心库)。其他开发者可以使用“git pull”命令接受你提交的版本更新。如果你正在一个多人协作的项目团队或者同一个项目需要在不同电脑上面完成的时候,bare repository可以满足你的分布式开发需求。(也就是说,大家都把内容分享到中心仓库,然后每个人都可以获取其他人的修改信息的过程,但中心仓库没有代码文件)

  • git init --bare 的特点

  • 使用命令"git init --bare"(bare汉语意思是:裸,裸的)初始化的版本库(暂且称为bare repository),会生成多个记录版本信息的文件。
  • 这种方式,不会包含实际项目源文件的拷贝,所以该版本库不能称为工作目录(working tree)

查看一下刚才用 git init --bare生成的 test.git目录,结构如下

  • git init 的特点

  • 会生成一个.git(隐藏文件夹),在这个文件夹里面有多个版本历史记录文件。
  • 使用–bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件。这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面

查看一下用 git init test_git.git生成的 test_git.git目录,结构如下  

 

  • git init容易产生冲突的地方

  • 因为远端仓库的用户正在master的分支上操作,而你又要把更新提交到这个master分支上,当然就出错了。
  • 但如果是往远端仓库中空闲的分支上提交还是可以的,比如git push origin master:b1 还是可以成功的。

管理公钥

如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。

上面已经讲解如何安装Gitosis,这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PPT如何转换成PDF?三种转换方法告诉你

大家在工作中会使用PPT格式的文件来汇报工作流程吗&#xff1f;当上级领导要求你将这些工作内容全部汇总&#xff0c;并用PDF文件发给他的时候&#xff0c;你是怎么做的呢&#xff1f;是重新将内容复制黏贴到PDF文件中吗&#xff1f;今天告诉你一个简单的方法&#xff0c;其实只…

【echarts】自定义legend样式 echarts图例与⽂字对齐问题

较完整的使用介绍参考&#xff1a;https://blog.csdn.net/changyana/article/details/126281275 起因 今天使⽤echarts时发现官⽹⽰例图例部分并没有进⾏对齐&#xff0c;⼀上⼀下逼死强迫。。。 解决办法 textStyle: { // 添加height: 10, // 关键在这个height设置rich: …

前端开发-异常问题记录

Q1&#xff1a;Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示&#xff1b; 可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决 Q2&#xff1a;浏览器跨域问题&#xff08;通过配置浏览器解决&#xff09; 将chrome浏览器复制一个进行修改&#xff…

CRM如何帮助企业提高工作效率?

企业管理者在创建团队时&#xff0c;除了要凝聚人心&#xff0c;更注重效率&#xff0c;企业团队的工作效率直接决定了企业的生产力&#xff0c;生产力决定战斗力&#xff0c;使用CRM系统可以帮助企业提高工作效率。 前言 企业管理者在创建企业团队时&#xff0c;除了要凝聚人…

IOS开发基础 · SwiftUI · StanfordCS193p Lecture3-4

IOS开发Lecture3MVVMVarieties of Typesstruct & classdont care - genericsFunctionClosuresprivate(set)for函数作为参数传给函数初始化顺序Lecture4修改代码View界面预览代码修改构建View-ViewMode点击事件让bool值反转internal external nameprint("\( )")st…

NeurIPS 2022: S3GC 可扩展图聚类

talk 文章的创新性不大&#xff0c;meta-review是给了 如果还可接收&#xff0c;再考虑。 但是 本文确实是 可扩展图聚类的重要一步。已有的方法 或多或少只在 小的数据集上 进行聚类。 存在一些非聚类的通用gnn方法进行采样。本文就是利用采样降低复杂度&#xff0c;并进行大…

基于FPGA的UDP 通信(四)

引言 前文链接&#xff1a; 基于FPGA的UDP 通信&#xff08;一&#xff09; 基于FPGA的UDP 通信&#xff08;二&#xff09; 基于FPGA的UDP 通信&#xff08;三&#xff09; 本文基于FPGA与MATLAB作千兆以太网通信模块UDP数据接收实验板级验证&#xff1a;FPGA接收上位机数…

大前端 TOB 0.5 WordPress模板 漂亮大气自适应多终端多功能

tob主题基于WordPress程序&#xff0c;响应式布局支持电脑、平板和手机的完美展示。tob适用于各种图片展示网站、新闻站、电影站、美图站、资源站等等&#xff0c;扁平化设计、公众号展示、打赏功能、列表无限加载、相册功能。tob是基于WordPress程序的主题&#xff0c;由theme…

多线程与高并发(五)

【ReentrantLock源码】&#xff1a; 【AQS源码】&#xff1a; 【公平与非公平】&#xff1a; 【公平】&#xff1a; 线程想要获得一把锁&#xff0c;乖乖的去这把锁的等待队列里排队————公平。 【非公平】&#xff1a; 线程想要获得一把锁&#xff0c;不去排队&#xff0c…

嵌入式实时操作系统的设计与开发(九)

同步机制 aCoral信号量机制不仅可以实现临界资源互斥访问&#xff0c;控制系统中临界资源多个实例的使用&#xff0c;还可以用于维护线程之间、线程和中断之间的同步。 当信号量用来实现同步时&#xff0c;起始值为0&#xff0c;如一个线程正在等待某个I/O操作&#xff0c;当…

【外贸小知识】通过whatsapp获取流量的几种小方法

相信做外贸的小伙伴们对于是whatsap比较熟悉的&#xff0c;都想通过whatsapp来获取更多流量&#xff0c;更多用户。今天我们花漾灵动小编就给大家汇总了通过whatsapp获取流量的几种小方法&#xff0c;希望能对新手小白有点作用哦&#xff01;通过whatsapp获取流量的几种小方法1…

【PyTorch深度学习实践】07_Dataset和Dataloader

文章目录1. Epoch&#xff0c;Iteration&#xff0c;Batch-Size2. Dataset 和 Dataloader2.1 Dataset2.2 Dataloader2.2.1 例子2.2.2 enumerate函数3. 完整代码1. Epoch&#xff0c;Iteration&#xff0c;Batch-Size 参考博客 2. Dataset 和 Dataloader 参考博客 功能概览 2…

2023年浙江建筑八大员(标准员)精选真题题库及答案

百分百题库提供建筑八大员&#xff08;标准员&#xff09;考试试题、建筑八大员&#xff08;标准员&#xff09;考试真题、建筑八大员&#xff08;标准员&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 14.根据《施工现场临…

Electron Vue之间的通讯 自定义标题栏实现最小化全屏关闭功能

方便以后定制化使用&#xff0c;学习记录一下。 话不多说&#xff0c;先看看效果吧。 效果 版本 electron ^13.0.0 知识点 Vue 相互通讯 Electron 标题栏主要逻辑代码 新建public\preload.js文件&#xff0c;用于前端全局发送和监听消息。 const { contextBridge, ipcRen…

【Linux】Linux权限的理解

文章目录&#x1f3aa; Linux权限的理解&#x1f680;1.shell命令及其运行原理&#x1f680;2.Linux权限概念⭐2.1 用户与root身份切换⭐2.2 用户与用户身份切换⭐2.3 单条指令提权&#x1f680;3.Linux文件权限⭐3.1 文件属性(第一个字符)⭐3.2 文件角色划分与文件属性⭐3.3 文…

线性代数第四章 向量组的线性相关性

向量组及其线性组合一.向量、向量组1.向量n个有次序的数a1,a2,...,an所组成的数组称为n维向量&#xff0c;这n个数称为该向量的n个分量&#xff0c;第i个数ai称为第i个分量n维向量可以写成一行&#xff0c;也可以写成一列&#xff0c;在没有指明是行向量还是列向量时&#xff0…

Authing 入选长城战略咨询《2022中国潜在独角兽企业研究报告》

12 月 23 日&#xff0c;长城战略咨询&#xff08;GEI&#xff09;发布《2022 中国潜在独角兽企业研究报告》&#xff08;下称《报告》&#xff09;。作为身份云行业领先的代表企业&#xff0c; Authing 凭借着过硬的技术实力和突出的创新能力&#xff0c;首次入选中国潜在独角…

软件测试工程师为什么要写测试用例?

软件测试工程师为什么要写测试用例&#xff1f;相信从事软件测试行业的从业者来讲&#xff0c;测试用例并不陌生。因为测试用例不仅仅是一组简单的文档&#xff0c;它包含前提条件、输入、执行条件和预期结果等等重要内容&#xff0c;并且能够完成一定的测试目的和需求。下面本…

深度学习(20)—— ConvNext 使用

深度学习&#xff08;20&#xff09;—— ConvNext 使用 本篇主要使用convnext做分类任务&#xff0c;其中使用convnext-tiny&#xff0c;其主要有5块 stage0stage1stage2stage3head 文章目录深度学习&#xff08;20&#xff09;—— ConvNext 使用Part 1 ModelPart 2 Traini…

【数据结构】一篇博客带你实现双向带头循环链表!!!(零基础小白也可以看懂)

目录 0.前言 1. 简述双向带头链表 2.双向带头循环链表的实现 2.1 设计双向带头循环链表结构体 2.2双向带头循环链表的初始化 2.3双向带头循环链表的尾插 2.4双向带头循环链表的尾删 2.5双向带头循环链表的头插 2.6双向带头循环链表的头删 2.7双向带头循环链表的插入 …