1.git目录解析

为了了解git。了解git的原理,先从.git的文件

1.git的目录

  • hook
  • info
  • logs
  • objects
  • refs
  • COMMIT_EDITMSG
  • config
  • description
  • gitk.cache
  • HEAD
  • index
  • packed-refs
12
cd .git  //进入.git文件ls -al   //查列表

文件夹解析

存储指向branch的最近一次commit对象的指针

hook:存放一些shell脚本
info:存放仓库的一些信息
logs:保存所有更新的引用记录
==refs:==
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
第一步:cd refs

ls -al //可以看到列表heads,remotes和tagstotal 4drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 ./drwxr-xr-x 1 Hades 197121 0 2月   5 23:21 ../drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 heads/drwxr-xr-x 1 Hades 197121 0 2月   5 22:57 remotes/drwxr-xr-x 1 Hades 197121 0 2月   5 23:05 tags/

第二步:查看headcd refs

cd heads

cat master7035757e6b6884467aceb0700fcbb4b085c069f2

git cat-file -t 7035757e6b68 //查看树类型commit

第三步:查看tags 用于大版本的标记如V1.4cd refs

cd tags

cat master7035757e6b6884467aceb0700fcbb4b085c069f2

git cat-file -t 3f8a960a28301 //查看树类型tag

第四步:查看remotes //存储最近一次push到远程仓库的commit对象的哈希值ls -altotal 0drwxr-xr-x 1 Hades 197121 0 2月   5 22:57 ./drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 ../drwxr-xr-x 1 Hades 197121 0 2月   5 22:57 origin/

cd orgin

ls -al

total 4drwxr-xr-x 1 Hades 197121  0 2月   5 22:57 ./drwxr-xr-x 1 Hades 197121  0 2月   5 22:57 ../-rw-r--r-- 1 Hades 197121 41 2月   5 22:57 cssdrwxr-xr-x 1 Hades 197121  0 2月   5 22:57 feature/-rw-r--r-- 1 Hades 197121 32 2月   5 22:57 HEAD-rw-r--r-- 1 Hades 197121 41 2月   5 22:57 master-rw-r--r-- 1 Hades 197121 41 2月   5 22:57 temp
==objects:==
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
cd objects

ls -altotal 12drwxr-xr-x 1 Hades 197121 0 2月   5 23:05 ./drwxr-xr-x 1 Hades 197121 0 2月   5 23:21 ../drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 00/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 0d/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 10/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 15/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 1a/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 1b/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 1e/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 21/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 info/drwxr-xr-x 1 Hades 197121 0 2月   5 14:36 pack/

cd 1a   //选一个文件ls -altotal 9drwxr-xr-x 1 Hades 197121   0 2月   5 14:36 ./drwxr-xr-x 1 Hades 197121   0 2月   5 23:05 ../-r--r--r-- 1 Hades 197121 240 2月   5 14:36 87007f9df391fd1eb6fb7fd529db1789cb4caf

git cat-file -p 1a87007f9df391fd1eb //将文件名和哈希值组合tree

git cat-file -t 1a87007f9df391fd1eb //查看树内容100644 blob f189165b39f0b487fe0b1655cd6c31e8836292c4    0.txt100644 blob a420cabf924b6247fa6c58759715322cd0e5d1f2    LICENSE100644 blob 88089f54ee37e47694fb0b40d70df02ada0dc403    image.jpg100644 blob c1c4091a2ad1d84f1de28256398a129a23ba2a4a    index.html040000 tree d171c34fa5b687efe88587d4aab6784ad16a5bc5    js100644 blob 1b215135940281fa5e952530aa0afadb93cc2d53    readme.md040000 tree 4a27d52dbbf6a83ec9b7828faa100d66149cbd3d    styles

git cat-file -t c1c4091a2ad1d84f1d  //indexblob

git cat-file -p c1c4091a2ad1d84f1d  //可以在进一步的查看内容<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>stash修改</title></head><body><img src="image.jpg"><div>参考项目信</div><img src="image.jpg"><div>参考项目信</div></body></html>

文件解析

COMMIT_EDITMSG:最新提交的一次Commit Message,git系统不会用到,给用户一个参考
description:仓库的描述信息,主要给gitweb等git托管系统使用
index:暂存区(stage),一个二进制文件
FETCH_HEAD:是一个版本链接,指向着目前已经从远程仓库取下来的分支的末端版本
ORIG_HEAD:HEAD指针的前一个状态
==HEAD:==

映射到ref引用,当前正在使用的分支

12
cat HEAD //查看HEAD哈希值7035757e6b6884467aceb0700fcbb4b085c069f2

当切换分支或提交新的commit,哈希值会发生变化

==config:==

git仓库配置文件

1
cat .git/config //查看git的配置
packed-refs:当ref文件过多时会打包到packed-refs

原文:大专栏  1.git目录解析

原文地址:https://www.cnblogs.com/chinatrump/p/11597027.html

时间: 2024-10-30 00:21:31

1.git目录解析的相关文章

git submodule 解析

submodule 原理 submodule 是一个版本库,跟你的主版本库实际上是一个东西. 将 submodule add 到你的主版本库,是将一个子版本库的一条提交,也就是head,被主版本库纪录了下来. 主版本库使用这个版本库head之前的代码. git 是一个文件系统,子版本库的remote地址和这个版本库的head,这些纪录究竟保存在哪里呢. 我们来具体操作一下 我在自己项目中添加了一个临时分支,_my_br, 在这个分支下做下实验 尝试将sqlite作为子版本加入到主版本库中 看一下

Git全解析之远程仓库交互

文章目录 1. Git全解析之远程仓库交互 1.1. 中央仓库的概念 1.2. 本地分支与远程分支 1.3. pull与fetch 1.4. 关于捐赠 Git全解析之远程仓库交互 中央仓库的概念 虽然说git是分布式版本控制工具,但同样有远程仓库的概念.出于各种目的,我们有时需要有一个共享的远程仓库,如GitHub上的仓库,我们公司项目中用来测试和部署的仓库等.一般的操作步骤是先在公共服务器上创建一个仓库,然后每个开发人员都clone这个仓库进行各自的开发,开发完成后再push到远程仓库进行测试

Git Step by Step – (4) 探索.git目录

前面一篇文章介绍了Git对象模型,接下来我们就进入".git"目录看看到底有什么东西,目录中哪些东西又跟Git对象模型相关.结合这个目录,我们将进一步了解Git的工作原理. .git目录 下面就开始进入.git目录了,通过"ls"命令可以看到.git目录中的文件和子目录: 对于这些文件和目录,下面给出了一些基本的描述.在后面后有logs.objects.refs.index和HEAD更详细的介绍 (D) hooks:这个目录存放一些shell脚本,可以设置特定的gi

Git初始化之思考为什么工作区根目录下有一个.git目录

Git的一个显著特点是,版本库位于工作区的根目录下.对于Git来说,版本库位于工作区根目录下的 .git 目录中,且仅此一处,在工作区的子目录下则没有任何其他跟踪文件或目录. Git这种将版本库放在工作区根目录下的设计使得所有的版本控制操作(除了与其他远程版本库之间的互操作)都在本地即可完成,不像Subversion只有寥寥无几的几个命令脱离网络执行.而且,Git没有CVS和Subversion中存在的安全泄漏问题(只要保护好 .git 目录). Git将版本库(.git目录)放在工作区根目录下

JMeter的安装和目录解析

转载:http://www.cnblogs.com/tian-yong/p/4459685.html JMeter的安装 1>软件下载地址 JDK:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html?ssSourceSiteId=ocomen JMeter:http://jmeter.apache.org/download_jmeter.cgi JMeter插件:http://jmeter-p

对于zsh是如何判断当前是个git目录的一点研究

zsh进入一个git目录时就会有反应,显示这是个git 那么,为什么进个普通文件夹就没反应呢?到底怎么判断的呢? 我做了个小实验,在普通文件夹下建立.git目录,zsh进去 没反应. 于是用git命令吧,git init一下,zsh进去 有了,显示当前是个git目录了 原来是这样,于是进去.git目录,删了那三个文件(目录就不删了),zsh进去 无反应,看来和这文件完整性有关 于是touch自创三个同名空文件,再zsh进去 无反应 结论: zsh应该是判断当前的.giit目录,并对里面的文件完整

在centos搭建git服务器时,不小心把/home/git目录删除了,我是怎么恢复的

在删除掉/home/git目录后,每次 git push提交时,都让填写密码,烦 第一步:在本地找到id_rsa.pub 公钥文件,这个是共用的,Linux系统和github 中都是使用的这个文件 第二步:在/home下创建git用户的文件夹, 命令  我的git用户名就是Git mkdir git chown -R git:git git 更改用户的所有者 第三步:在git文件夹下创建 .ssh文件夹 第四步;在 .ssh 文件夹下创建文件authorized_keys 第五部:将id_rsa

新目录下使用git管理,未配置.git目录,报错fatal: Not a git repository (or any of the parent directories): .git

fatal: Not a git repository (or any of the parent directories): .git 第一次用Git,遇到这个错误提示,原来是这样的: fatal: Not a git repository (or any of the parent directories): .git This tells you that the directory you're in is not a git repository. Before you can add

.git目录解刨

$cd .git $ ls | more branches/ # 新版的Git已经不再使用这个目录,所以大家看到它 #一般会是空的 COMMIT_EDITMSG # 保存着上一次提交时的注释信息 config # 项目的配置信息 description # 项目的描述信息 HEAD # 项目当前在哪个分支的信息 hooks/ # 默认的"hooks" 脚本文件 index # 索引文件,git add 后把要添加的项暂存到这里 info/ # 里面有一个exclude文件,指定本项目要