Git bare repository 的概念

要搞清这个概念,网上搜索一堆网页,中文的网页教程,没一个说得让人明白。而英文的,一看就明白。


这是一份很容易看懂的英文网页:What is a bare git repository?   地址:http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/


大意:


git init 创建的是一个工作目录,以下简称 A;git init --bare 创建的是一个空目录,以下简称 B。这两个目录的区别是:


A 里面有你工作用的文件,working tree,是指你工作用的文件的树目录结构。在 A 底下,还有一个 .git 子目录,里面就是 git 帮你管理的文件的历史版本信息。你在工作目录里编辑你的文件后,用 git 的 add, delete, commit,就是提交到这个子目录下。也就是说,git 帮你做的版本控制信息,其实就是保存在当前工作目录下的一个 .git 的子目录下。


B 里面只有 git 的版本控制信息,没有你工作用的文件,也就是没有 working tree。因为它不包含工作用的文件,只有 git 自己需要的文件,所以这个目录下没有 .git 子目录,而是直接把 git 需要的文件放根目录底下了。但是,这个 bare 的目录本身的目录名,有一个 .git 的后缀。


另外,用 git clone 从别的仓库克隆过来的本地文件夹,是工作目录,包含了工作用的文件。


而一个 bare repository 是用来“分享”的。如果有几个人要访问同一个项目的文件,在一个中心点上创建一个 bare 仓库,所有项目成员可以 push 自己编辑的文件到这个仓库。


因此,概念上,一个 bare 仓库,可以看成是一个 git 的文件服务器。一个人的项目,其实也可以建一个 bare 仓库,用做文件备份。这样自己的工作电脑彻底完蛋,你换台电脑,把项目从服务器上 clone 下来,就可以继续干活了。


所以,bare 仓库类似版本管理服务器,只存储版本管理的相关文件,不存储工作文件,因此里面没有工作目录。你要干活,必须从 bare 仓库克隆一个到本地的目录,然后在这个克隆的目录里面工作。


另外,如果你已经有了一个工作目录,但还没有被 git 管理起来,也是可以用 git 命令将它变成工作目录的。然后,你还可以把这个工作目录,和一个 bare 仓库,建立联系,方便将来 push 东西进去。


从 git 的角度来看,你提交的,是你对工作目录下的文件的改变,这个提交,其实只是把相关的内容,写入了你的工作目录下的那个被 git 管理的 .git 目录底下的文件里面。如果要把这些内容提交到一个 bare 仓库(通常是在一台服务器上,不过你要在工作电脑上另外建一个 bare 仓库,也不是不可以),就做一个 push 的操作,至于 push 到哪里,是访问那个 bare 仓库的 URL 路径问题。理论上,可以把一个工作目录,push 到几个不同的 bare 仓库里面,并不是一个工作目录只能对应一个远端的服务器。
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值