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一下
阅读(1893) | 评论(0) | 转发(0) |