关闭

Git bare repository 的概念

标签: git 版本管理
1238人阅读 评论(0) 收藏 举报
要搞清这个概念,网上搜索一堆网页,中文的网页教程,没一个说得让人明白。而英文的,一看就明白。


这是一份很容易看懂的英文网页: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 仓库里面,并不是一个工作目录只能对应一个远端的服务器。
0
0
查看评论

git init 与 git init --bare 的区别

git init  和 git init –bare 的区别 使用命令"git init --bare"(bare汉语意思是:裸,裸的)初始化的版本库(暂且称为bare repository)只会生成一类文件:用于记录版本库历史记录...
  • ljchlx
  • ljchlx
  • 2014-03-22 16:30
  • 43608

git init 与git init --bare

对于git 仓库的初始化操作,有人说用git init ,有人说用git init –bare ,那么我就来说一下这两者的区别吧。
  • sinat_34349564
  • sinat_34349564
  • 2016-09-09 15:44
  • 1780

使用”git init”和使用”git init –bare”的区别

在使用Git初始化版本库的时候,使用”git init”命令和使用”git init –bare”命令有什么区别呢? 用”git init”初始化的版本库(暂且称之为working repository)将会生成2类文件:“.git“版本库目录(记录版本历史)和实际项目文件的拷贝。你可以把这类版本库...
  • ling091
  • ling091
  • 2016-04-29 11:15
  • 2381

远端仓库初始化成裸仓库 git init --bare

1 git init  和 git init –bare 的区别  用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。 比如有用户在该目录(就称为远端仓库)下执行git操作...
  • feizxiang3
  • feizxiang3
  • 2012-10-12 17:36
  • 25265

Git学习笔记(十一) Git克隆

用法1:git clone 将指向的版本库创建一个克隆到目录。目录相当于克隆版本库的工作区,文件都会检出,版本库位于工作区的.git目录中 用法2:git clone --bare 用法3:git clone --mirror 用法2和用法3创建的克隆版本库都不包含工作区,直接就...
  • Agul_
  • Agul_
  • 2012-08-08 16:55
  • 25448

Git托管:将本地项目代码上传(push)到自己的Git repository

首先下载并安装git版本控制软件,我安装的是Git-1.9.2-preview20140411,这里是我上传的有需要的可以download然后安装即可。*******replace资源链接 以下命令可以查看自己安装的版本: $ git --version git version 1.9.2.m...
  • u013295579
  • u013295579
  • 2017-03-25 21:49
  • 2578

理解Git——Repository(仓库)

原文出处:http://www.sbf5.com/~cduan/technical/git/,感觉对Git讲解的比较好,翻译下来,便于自己学习和参考。对一些名词保留了英文。 1、Repository(仓库)包含的内容     Git的目标是管理一个工程,或者说是一些文件的集合,...
  • lixiaokang_cool
  • lixiaokang_cool
  • 2013-11-11 14:12
  • 3310

git 解决fatal: Not a git repository

我用git add file添加文件时出现这样错误: fatal: Not a git repository (or any of the parent directories): .git 提示说没有.git这样一个目录,解决办法如下: git init就可以了! 当一个人找不到出路的时候,最...
  • u012306714
  • u012306714
  • 2016-09-18 09:26
  • 24774

创建 git repository 的一种方法

在之前的文档http://blog.csdn.net/CaspianSea/article/details/41952139 里给出了一种建立代码仓库的方法。 下面给出另一种方法: 1。在repo目录创建目录 test 2. cd test, 然后执行: $ git init --bare --sh...
  • CaspianSea
  • CaspianSea
  • 2015-02-04 23:00
  • 7875

Git和Repo管理使用简要介绍

在Linux平台下进行Android系统项目开发时,需要git或repo管理。   一. Git和Repo的区别:        1. Git:Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。   &...
  • stevenhu_223
  • stevenhu_223
  • 2013-04-22 11:28
  • 54243
    个人资料
    • 访问:34395次
    • 积分:1052
    • 等级:
    • 排名:千里之外
    • 原创:71篇
    • 转载:7篇
    • 译文:0篇
    • 评论:14条
    文章分类
    最新评论