Chinaunix首页 | 论坛 | 博客
  • 博客访问: 301721
  • 博文数量: 35
  • 博客积分: 825
  • 博客等级:
  • 技术积分: 913
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-11 09:44
文章分类

全部博文(35)

文章存档

2013年(10)

2012年(24)

2010年(1)

我的朋友

分类: 系统运维

2012-12-27 12:26:30

git bare/development repo

git仓库根据角色来分 可以划分为两类 bare 和 development  bare仓库没有working directory 可以通过git init --bare来建立bare仓库  bare仓库的名字通常情况下是xxx.git 下图是bare仓库的目录结构 
这个仓库目测和我们平时使用的working directory目录下的.git目录类似 可以简单把bare仓库看成是黑盒 里面存的就是git的一些元数据 从bare仓库pull 或者向它push我们的commits  

development仓库就是最常见的仓库类型 git clone一个远程仓库 或者自建的git init(没有--bare选项)仓库就是development仓库 我们可以commit更新等等


解读.git/config

我从github上clone了一个flask项目 clone后查看.git/config 会有如下小节
[remote "origin"]  指明了一个remote仓库 remote tracking分支有自己的命名空间 我们可以在.git/refs/remotes/ 目录下看到有一个origin目录 如果我们再额外添加一个远程仓库 gitlab 那么我们在.git/refs/remotes目录下看到一个gitlab的目录 里面是具体tracking的远程分支的名字

+refs/heads/*:refs/remotes/origin/*  是一个refspec 用来映射远程分支和本地tracking的分支 它的语法格式为:[+]source:destination  +号告诉git在做fast-forward的时候不需要进行安全检查 *是一个通配符 用在这里告诉git去tracking远程的所有分支  也可以只tracking少数的几个分支 具体的做法就是 用具体的branch名字来取代这里的*通配符 每一个tracking分支 列一条目录

我们在执行git pull的时候 可以将它拆分为两步 第一步是fetch 如果git fetch没有指定任何其它的参数 默认是从origin去fetch分支 这些分支在refspec中指定 第二步就是合并分支(merge或者是rebase) 默认进行merge操作 如果当前分支是master 那么git会把远程的master分支merge进来 在更新本地分支的时候 不赞成使用git pull 而是人为地去把这两个步骤拆分开 fetch自己想要的分支 merge特定的分支 或者rebase一下
阅读(1832) | 评论(0) | 转发(0) |
0

上一篇:git reset

下一篇:No JPEG support in this PHP build

给主人留下些什么吧!~~