搭建自己的Git服务器

news2024/9/23 5:21:40

环境

服务端:Ubuntu 22.04

客户端:Win11_x64

前提条件:需要确保在Windows机器上能够ping通Ubuntu服务器, 并且服务端与客户端均已安装了Git软件

服务端上的配置操作

以Ubuntu服务器作为Git服务端的运行环境,并方便后期免密推送及管理代码的需求,需要先安装OpenSSH及创建git专属用户等操作。

1. 先检查是否已经安装OpenSSH软件

dpkg --list | grep ssh

如果出现如上图所示,说明已经安装了OpenSSH软件;如果没有上图红框中的两行说明需要安装 openssh-server openssh-client;

apt-get install -y openssh-server openssh-client

安装完成之后再次用上述命令(dpkg --list | grep ssh)进行检查是否已经安装成功,并可以使用以下命令查看ssh服务的运行状态及启动ssh服务

systemctl status ssh   查看ssh服务的运行状态

systemctl enable ssh   启动ssh服务

2. 新建专属用户git,为了方便连接服务端仓库时使用

adduser git

然后输入两次密码,一路回车就创建好了

(PS: useradd git 这个命令也可以创建,区别在于执行这条命令时不需要设置密码,后面需要使用chpasswd命令来修改密码,如 echo "git:123456" | chpasswd)

3. 进入git用户主目录,先创建一个远端仓库(我这里将远端仓库放在了git主目录下,位置可以根据自己情况)

cd /home/git/private_code_repository/

创建一个名为FristProject的空仓库

git init --bare FirstProject.git

4. 在git主目录下先创建一个.ssh目录以便后面使用

mkdir -p /home/git/.ssh/

5. 修改仓库存放目录的所有者及所属组均为git,方面后面git用户可以直接访问

chown git:git -R /home/git/private_code_repository/

客户端上的配置操作

1. 打开终端窗口,使用以下命令生成公私匙

ssh-keygen -t rsa

生成的公私钥一般存放在类似 C:\Users\DELL\.ssh 这样的目录下

 在 C:\Users\DELL\.ssh 目录下右键打开终端,使用scp将 id_rsa.pub 拷贝到服务端/home/git/.ssh/目录下,第一次操作时需要输入git用户的密码

在服务端进入/home/git/.ssh/目录,执行命令  cat id_rsa.pub >> authorized_keys (PS:这步操作需要在服务端执行一下)

本地待推送目录为空时

 2. 如果客户端还没有需要推送的本地仓库(空目录时),则可以直接clone服务端新建的仓库,直接clone的仓库已经默认为仓库添加了origin别名

3. 此时就可以在仓库下存放代码脚本等各种文件,然后执行下面操作将其提交到本地仓库
 

 4. 提交到本地仓库后,可以将其push的远端仓库(因为已经有了远端仓库的别名origin,所以可以直接push.PS:第一次push需要添加-u参数,后面就不需要了) 

 推送到远端仓库后,发现远端仓库FirstProject.git并没有什么明显的变化

5. 在服务器上的另一个目录下或者团队协作其他成员需要使用时模拟拉取操作,首次需要clone,后期pull

 6. 测试修改一次readme.txt文件后,客户端直接git push, 其他成员直接git pull就可以了

2-6步模拟了客户端为空目录时的情况,下面给出待推送目录已有代码文件时的情况:

本地待推送目录不为空时

 1. 先在服务端建立一个新的仓库SecondProject.git

2. 如下图所示,在本地机器上已有待推送的文件夹NewProject,但它不是一个受git管控的目录(没有.git目录)
3. 此时先将NewProject初始化为一个受git管控的目录(git init),然后再将所有代码文件提交的本地仓库(git add/git commit)

4. 此时虽然已经将NewProject提交到本地仓库,但还没有与任何远端仓库建立连接
 5. 将本地仓库与远端仓库SecondProject.git建立连接

git remote add origin ssh://git@10.1.104.100:/home/git/private_code_repository/SecondProject.git

git remote -v

6. 如上图所示已经将本地仓库与远端仓库建立了连接,就可以使用git push 推送代码到远端仓库
git push -u origin master

并在服务器上模拟从远端仓库clone操作

7. 测试在客户端修改文件后git push,然后在服务器上模拟拉取操作 git pull
 

 

以上演示了客户端待推送目录为空和不为空时的push操作;并模拟了从服务端仓库的clone与pull操作。

至此,就搭建好了自己的Git服务器,方便工作与学习中管理代码。

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

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

相关文章

iOS开发-CAShapeLayer与UIBezierPath实现微信首页的下拉菜单效果

iOS开发-CAShapeLayer与UIBezierPath实现微信首页的下拉菜单效果 之前开发中遇到需要使用实现微信首页的下拉菜单效果。用到了CAShapeLayer与UIBezierPath绘制菜单外框。 一、效果图 二、CAShapeLayer与UIBezierPath 2.1、CAShapeLayer是什么? CAShapeLayer继承自…

解决Nacos启动时遇到的一些错误

当我们双击nacos的bin目录下的statup.cmd启动Nacos时,发现报以下错误: [dba-load-error] load jdbc.properties error 报错的原因是:数据库找不到,没有导入。 解决方法步骤: ①在安装的nacos的conf目录下&#xff0…

C++:类和对象(下)---对类和对象深入一些的理解

文章目录 构造函数?初始化列表explicit关键字 匿名对象 构造函数? 初始化列表 前面已然介绍过构造函数,但并未完全结束,构造函数有很多种写法,有带缺省参数的,有全缺省的,不带缺省参数的…但用…

Jenkins从配置到实战(二) - Jenkins的Master-Slave分布式构建

前言 Jenkins的Master-Slave分布式构建,就是通过将构建过程分配到从属Slave节点上,从而减轻Master节点的压力,而且可以同时构建多个,有点类似负载均衡的概念。简单理解就是,将Jenkins服务器上的构建任务分配到其他机器…

GitLab开启双端认证并登录GitLab

GitLab开启双端认证并登录GitLab 1.介绍双端认证 单重认证——密码验证,这极其容易出现密码被盗,密码泄露等危险事件。 于是为了提高安全性,就出现了双因素认证,多因素认证。登录的时候不仅要输入账号和密码还需要输入一个验证码…

C++模板进价

本期我们来学习C模板的进价内容,没有看过初阶的同学建议先看看初阶内容 (26条消息) C模板初阶_KLZUQ的博客-CSDN博客 目录 非类型模板参数 模板特化 函数模板特化 类模板特化 模板分离编译 模板总结 我们之前一直说我们写模板时,typename和class没…

FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示

1.场景 基于特权A7系列开发板,采用OV5640摄像头实时采集图像数据,并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中,用到的软件版本,如下表所示,基本的硬件情况如下。该项目对应FPGA工程源码…

【雕爷学编程】Arduino动手做(129)---TTS文字转语音合成模块2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

【iOS】KVC KVO 总结

文章目录 KVC1. KVC赋值原理 setValue:forKey:2. KVC取值原理 valueForKey:3. 注意4. KVC的批量存值和取值 KVO 使用1. KVO的介绍2. KVO监听的步骤注册监听监听实现移除监听例子 3. KVO的传值4. KVO注意5. KVO的使用场景 KVO原理1. KVO的本质是改变了setter方法的调用2. _NSSet…

【图论】树上差分(边差分)

一.简介 其实点差分和边差分区别不大。 点差分中,d数组存储的是树上的节点 边差分中,d数组存储的是当前节点到父节点的那条边的差分值。 指定注意的是:边差分中因为根连的父节点是虚点,所以遍历结果时应当忽略! 二…

西安科技大学:融合传统与创新的学府之旅

文章目录 一、引言二、历史与发展三、学校特色四、学科建设五、校园环境与设施六、合作交流七、未来发展与展望 一、引言 西安科技大学历史悠久,底蕴深厚。学校办学历史可以追溯到1895年成立的北洋大学工学院采矿冶金科,1938年迁并于西北工学院矿冶系&a…

网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 网络编程 一、初始网络编程1.1什么是网络编程1.2BS/CS的优…

时序预测 | MATLAB实现NARX-ANFIS时间序列预测

时序预测 | MATLAB实现NARX-ANFIS时间序列预测 目录 时序预测 | MATLAB实现NARX-ANFIS时间序列预测效果一览基本介绍研究内容程序设计参考资料效果一览

JS判断类型的方法和对应的局限性(typeof、instanceof和Object.prototype.toString.call()的用法)

JS判断类型的方法和对应的局限性(typeof、instanceof和Object.prototype.toString.call()的用法) 一、typeof 返回: 该方法返回小写字符串表示检测数据属于什么类型,例如: 检测函数返回function 可判断的数据类型&#xff1a…

【程序员面试金典】02.07. 链表相交

题目 解题思路 Code Java public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA null || headB null) return null;ListNode a headA;ListNode b headB;while (a ! b ) {a a ! null ? a.next : headB; b b ! null ? b.next : headA; …

MD-MTSP:成长优化算法GO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、成长优化算法GO 成长优化算法(Growth Optimizer,GO)由Qingke Zhang等人于2023年提出,该算法的设计灵感来源于个人在成长过程中的学习和反思机制。学习是个人通过从外部世界获取知识而成长的过程,反思是检查个体自…

cmake 配置Visual studio的调试命令

配置代码如截图: set_property(TARGET ${TARGET_NAME} PROPERTY VS_DEBUGGER_COMMAND "./consoleTest.exe") set_property(TARGET ${TARGET_NAME} PROPERTY VS_DEBUGGER_COMMAND_ARGUMENTS "./config/labelDriver.cfg") set_propert…

【LeetCode每日一题】——84.柱状图中最大的矩形

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 栈 二【题目难度】 困难 三【题目编号】 84.柱状图中最大的矩形 四【题目描述】 给定 n 个…

【LeetCode】142.环形链表Ⅱ

题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部…

WPF线程使用详解:提升应用性能和响应能力

在WPF应用程序开发中,线程的合理使用是保证应用性能和响应能力的关键。WPF提供了多种线程处理方式,包括UI线程、后台线程、Task/Async Await和BackgroundWorker。这些方式与传统的Thread类相比,更加适用于WPF框架,并能够简化线程操…