Git服务器(中心仓库(裸仓库))搭建

目录

前言:Git三大重要的区域

前言:SVN与Git的最主要的区别

搭建Git服务器

git init --bare初始化中心仓库(裸仓库)


前言:Git三大重要的区域

  • 工作区
  • 简单理解就是需要进行版本控制的某个文件夹(假设为test)
  • 这个文件夹有一些特殊之处-多了.git这个隐藏的文件夹
  • 版本库
  • test文件夹下的.git文件夹就是版本库
  • 暂存区
  • 暂存区可以理解为一个虚拟工作区,这个虚拟工作区会跟踪工作区的文件变化(增删改等操作)
  • 一般存放在.git文件夹下的index文件(.git/index)中
  • 工作区的文件先被增加到这个区域里,再从这个区域提交到版本库
  • 除非是绕过暂存区直接提交
  • 否则Git想把修改提交上去,就必须将修改存入暂存区最后才能commit
  • 每次提交的是暂存区所对应的文件快照

前言:SVN与Git的最主要的区别

  • SVN是集中式版本控制系统,版本库是集中放在中央服务器的
  • 而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活
  • 干完后,需要把自己做完的活推送到中央服务器
  • 集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快
  • 如果在互联网下,如果网速慢的话,就纳闷了
  • Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库
  • 这样工作的时候就不需要联网了,因为版本都是在自己的电脑上
  • 既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?
  • 比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A
  • 这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了

搭建Git服务器

  • 远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改
  • GitHub就是一个免费托管开源代码的远程仓库
  • 但是对于某些视源代码如生命的商业公司来说
  • 既不想公开源代码,又舍不得给GitHub交保护费
  • 那就只能自己搭建一台Git服务器作为私有仓库使用
  • 搭建Git服务器需要准备一台运行Linux的机器,然后通过几条简单的apt命令就可以完成安装
  • 第一步,安装git
  • 第二步,创建一个git用户,用来运行git服务
  • 第三步,创建证书登录
  • 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件
  • 把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
  • 第四步,初始化Git仓库
  • 第五步,禁用ssh登录
  • 第六步,克隆远程仓库,在各自的电脑上运行

git init --bare初始化中心仓库(裸仓库)

  • git init使用于本地进行项目部署和搭建

  • git init --bare使用于服务器上,多版本协同管理

  • 安装完git之后,要创建版本库

  • 比如:在某文件夹下新建了一个文件夹名为repository.git(服务器上的Git仓库通常都以.git结尾)

  • 将repository.git初始化为git仓库(git init)

  • 如果初始化远程仓库的话,要使用这个命令:git init --bare repository.git

  • git init --bare: 指定某个目录成为中心仓库(裸仓库)

  • 通常,我们初始化远程服务器仓库时,使用git init --bare < repo >:建立一个“裸”的git仓库

  • 这样的仓库初始化后,其项目目录下就是标准仓库.git目录里的内容,没有工作区

  • 这样初始化的仓库并没有.git目录,只有.git目录下的文件

  • 不使用--bare选项时,就会生成.git目录以及其下的版本历史记录文件

  • 这些版本历史记录文件就存放在.git目录下

  • 而使用--bare选项时,不再生成.git目录

  • 而是只生成.git目录下面的版本历史记录文件

  • 这些版本历史记录文件也不再存放在.git目录下面

  • 而是直接存放在版本库的根目录下面

  • 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作

  • 但别的用户在将更新push上来的时候容易出现冲突

  • 解决办法就是使用”git init --bare”方法创建一个所谓的裸仓库

  • 之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息

  • 而不允许用户在上面进行各种git操作(如:push、commit操作)

  • 如果你硬要操作的话,只会得到错误(”This operation must be run in a work tree”)

  • 但是,你依旧可以使用git show命令查看提交内容

  • 这个就是最好把远端仓库初始化成bare仓库的原因

  • 说白了,就是会创建一个裸仓库,裸仓库没有工作区

  • 服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区

  • 裸仓库适用于远程仓库,裸仓库可以直接作为服务器仓库供各开发者push、pull数据,实现数据共享与同步,不保存文件,只保存历史提交的版本信息

  • 注意

  • 不保存文件,只保存历史提交的版本信息,克隆时依旧会拿到完整的代码库

  • 因为在初始化第一次push时,就已经产生了add记录

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

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

相关文章

元类结合__new__

__new__:用来生成骨架 __init__:骨架添加血肉 【一】类中的__new__ class MyClass(object):def __init__(self,name,age):print(f"给当前MyClass类的对象初始化属性的时候会触发__init__")self.name nameself.age age ​def __call__(self,*args,**kwargs):pri…

isinstance和issubclass的使用

isinstance() : 判断当前对象是否是某一个类的类型 issubclass() : 校验一个类是否属于另一个类的子类 class Person(object):... ​ ​ class Student:... ​ ​ stu Student() ​ person Person() ​ # 【一】isinstance() : 判断当前对象是否是某一个类的类型 print(is…

23.HashMap的put方法流程

一、put方法的流程图 二、put方法的执行步骤 首先&#xff0c;根据key值计算哈希值。然后判断table数组是否为空或者数组长度是否为0&#xff0c;是的话则要扩容&#xff0c;resize&#xff08;&#xff09;。接着&#xff0c;根据哈希值计算数组下标。如果这个下标位置为空&a…

第 397 场 LeetCode 周赛题解

A 两个字符串的排列差 模拟&#xff1a;遍历 s s s 记录各字符出现的位置&#xff0c;然后遍历 t t t 计算排列差 class Solution {public:int findPermutationDifference(string s, string t) {int n s.size();vector<int> loc(26);for (int i 0; i < n; i)loc[s…

合并K个升序链表

题目 解法一 优先级队列 思想 将每个链表中的一个节点存放到优先级队列中&#xff0c;本题采用小根堆&#xff0c;将小根堆中的根节点取出&#xff0c;插入到最终的链表中&#xff0c;并且将该节点在原链表中的下一个节点插入小根堆中&#xff08;需要向下调整&#xff09;&a…

【019】基于SSM+JSP实现的进销存管理系统

项目介绍 进销存管理系统是对企业生产经营中物料流、资金流进行条码全程跟踪管理&#xff0c;从接获订单合同开始&#xff0c;进入物料采购、入库、领用到产品完工入库、交货、回收货款、支付原材料款等&#xff0c;每一步都为您提供详尽准确的数据。有效辅助企业解决业务管理…

2024OD机试卷-找座位 (java\python\c++)

题目:找座位 题目描述 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。 现在给出一排观众座位 分布图 ,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。 输入描述…

【机器学习】:基于决策树与随机森林对数据分类

机器学习实验报告&#xff1a;决策树与随机森林数据分类 实验背景与目的 在机器学习领域&#xff0c;决策树和随机森林是两种常用的分类算法。决策树以其直观的树形结构和易于理解的特点被广泛应用于分类问题。随机森林则是一种集成学习算法&#xff0c;通过构建多个决策树并…

kafka用java收发消息

用java客户端代码来对kafka收发消息 具体代码如下 package com.cool.interesting.kafka;import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; i…

Microsoft 发布了 5 月份产品安全修复报告。

我们提请大家注意我们归类为趋势*的两个漏洞&#xff1a; CVE-2024-30051 和 CVE-2024-30040。 1. Windows 内核库 DWM 核心库中的 CVE-2024-30051漏洞 该漏洞与负责显示桌面窗口&#xff08;DWM&#xff09;的内核库中的权限升级有关。成功利用漏洞可讓攻擊者在沒有使用者互…

Python模块之Numpy(五)-- 排序

Sort排序 NumPy 的排序方式主要可以概括为直接排序和间接排序两种&#xff0c;直接排序是对数值直接进行排序&#xff0c;间接排序是指根据一个或者多个键对数据集进行排序&#xff0c;在 NumPy 中&#xff0c;直接排序经常使用 sort 函数&#xff0c;间接排序经常使用 argsort…

商品服务:SPUSKU规格参数销售属性

1.Object划分 1.PO&#xff08;Persistant Object&#xff09;持久对象 PO就是对应数据库中某个表中的一条记录&#xff0c;多个记录可以用PO的集合。PO中应该不报含任何对数据库的操作 2.DO(Domain Object) 领域对象 就是从现实世界中抽象出来的有形或无形的业务实体。 3…

mysql字段乱序 information_schema

select COLUMN_NAME from information_schema.columns where table_namecollect_column_info and table_schema nz; 返回ASCII排列 导致 sqoop import \ --connect "jdbc:mysql://your_host/collect" \ --username your_username \ --password your_password \ --t…

SPI通信(使用SPI读写W25Q64)

SPI通信协议 • SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线 • 四根通信线&#xff1a; SCLK:串行时钟线&#xff0c;用来提供时钟信号的。 MOSI:主机输出&#xff0c;从机输入 MISO:从机输出&#xff0c;主机输入 SS:…

faiss::gpu::runMatrixMult ... cublas failed (13)错误处理

我使用的是python3.8, torch1.11,cu113 解决方法是安装faiss-gpu1.7.3 我代码中出现这个错误尝试了使用pip安装faiss-gpu1.71&#xff0c;1.72。都没有用。 使用conda安装faiss-gpu的tar.bz2安装会存在找不到libfaiss.so的问题。 pypi官网还没有faiss-gpu1.7.3的版本&#xf…

Chrome查看User Agent的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Java中的数据类型与变量

引言&#xff1a; 哈喽&#xff0c;各位读者老爷们大家好呀,long time no see!这里是小堇Java小课堂&#xff0c;在本课堂中我们将继续分享Java中的数据类型与变量&#xff0c;标识符&#xff0c;关键字等知识&#xff0c;那我们启程咯&#xff01; 数据类型与变量 1.字面变量…

红蓝对抗 网络安全 网络安全红蓝对抗演练

什么是红蓝对抗 在军事领域&#xff0c;演习是专指军队进行大规模的实兵演习&#xff0c;演习中通常分为红军、蓝军&#xff0c;演习多以红军守、蓝军进攻为主。类似于军事领域的红蓝军对抗&#xff0c;网络安全中&#xff0c;红蓝军对抗则是一方扮演黑客&#xff08;蓝军&…

socket介绍

socket简介 我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程&#xff0c;在本地进程通讯中我们可以使用PID来唯一标示一个进程&#xff0c;但PID只在本地唯一&#xff0c;网络中的两个进程PID冲突几率很大&#xff0c;这时候我们需要另辟它径了&…

pytest教程-46-钩子函数-pytest_sessionstart

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_report_testitemFinished钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_sessionstart钩子函数的使用方法。 pytest_sessionstart 是 Pytest 提供的一个钩子函数&#xff0c…