运行了git add和git commit没有将文件上传到服务器,那么都干了什么呢?先来说说git 的机制,git既然为分布式的版本控制工具,那就有别于svn集中管理式的机制。git是如何实现的呢?很简单将版本库完整的克隆一份到本地,这样就完成了任何人都为自己的git版本库做主的转换,这些文件就在你本机的.git下面
运行 ls .git有如下结果:
ls .git/
branches config description HEAD hooks index info logs objects packed-refs refs
下面来简单说一下这些文件及目录的用途
branches: 新版本的 Git 不再使用这个目录
config: 全局级别的配置文件,使用git config --global的配置都会写在这里
description: description is just a text file that is shown as project description in web frontend. Just write there something that explains what the repository is about。(应用参照:http://tosbourn.com/editing-git-repository-descriptions/)
HEAD: 指向当前工作分支的指向,没有分支指向ref: refs/heads/master,假设你运行如下命令查看当前工作的分支(分支的部分后面详讲),对比HEAD的变化
hooks: 目录保存客户端及服务器端一些特定操作时触发的脚本,默认不生效,需要去掉结尾的.sample才生效
index: 文件保存了暂存区域信息,这是一个二进制文件,里面是什么呢?可以使用 git ls-files --stage来查看,我们先来看我们的项目下面都有什么,再看它就明白了,它里面保存的就是当前你的工作区中的文件,第一列是权限,第二列是sha1值,第三列是文件名
指定了文件模式为 100644,表明这是一个普通文件。其他可用的模式有:100755 表示可执行文件,120000 表示符号链接
info: 目录保存了一份不希望在 .gitignore 文件中管理的忽略模式 (ignored patterns) 的全局可执行文件
logs: 记录操作历史,在灾难恢复中特别有用
objects: 目录存储所有数据内容
packed-refs: 维护时运行的auto gc命令将将refs文件挪到.git/packed-refs中以提高效率,当更新一个引用时,Git 不会修改这个文件,而是在 refs/heads
下写入一个新文件。当查找一个引用的 SHA 时,Git 首先在refs
目录下查找,如果未找到则到 packed-refs
文件中去查找。因此如果在 refs
目录下找不到一个引用,该引用可能存到packed-refs
文件中去了。
refs: 目录存储指向数据 (分支) 的提交对象的指针
上面的文件和目录中以HEAD、index、objects和refs最为重要。