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

Posted by 汤键|兔子队列 on January 24, 2024 禁止转载
本文总共 1919 字 · 阅读全文大约需要 6 分钟

前言: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记录