您的当前位置:首页正文

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

2024-11-27 来源:个人技术集锦


前言: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 < repo >:建立一个“裸”的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记录

显示全文