我正在尝试弄清楚“本地存储库”与我正在处理的本地文件(在文件系统中称为其他源控制工具中的“工作区”)之间的区别。 进一步解释: 假设我的本地代码位于:c:\ users \ A \ documents \ GitHub \。更改其中一个文件后,我可以将更改提交到“本地存储库”的主分支(当前为Master)-“本地存储库”实际上位于哪里?
我正在尝试弄清楚“本地存储库”与我正在处理的本地文件(在文件系统中称为其他源控制工具中的“工作区”)之间的区别。 进一步解释: 假设我的本地代码位于:c:\ users \ A \ documents \ GitHub \。更改其中一个文件后,我可以将更改提交到“本地存储库”的主分支(当前为Master)-“本地存储库”实际上位于哪里?
c:\users\A\ documents\GitHub
的代码库位于隐藏的子目录 c:\users\A\ documents\GitHub\.git
中。
您可以在git手册的"讨论"部分中了解更多细节:
一个Git项目通常由一个带有顶级“.git”子目录的工作目录组成。
(在Windows中是一个隐藏的文件夹:在c:\users\A\ documents\GitHub
中执行dir /AH
命令即可看到它)
你可以使用
.git
目录包含了一些东西,其中包括一个表示该项目完整历史记录的压缩对象数据库、一个“索引”文件,该文件将历史记录链接到当前工作树的内容,以及指向历史记录的命名指针,例如标签和分支头。对象数据库包含三种主要类型的对象:blob,用于保存文件数据;tree,用于指向blob和其他tree来构建目录层次结构;以及commits,每个commit都引用单个tree和一些父代commits。
--git-dir
选项或GIT_DIR
环境变量更改默认位置(本地仓库的位置)。本地存储库位于您的计算机上。当您使用git push命令推送更改时,您计算机上的本地更改将更新到远程存储库中,该存储库位于Gothic中。
如Roland Smith所述,本地存储库数据存储在存储库文件夹(在这种情况下是GitHub)中的.git文件夹内。
为了进一步理解,让我们检查该文件夹的内容。
$ ls -C .git
COMMIT_EDITMSG MERGE_RR config hooks info objects rr-cache
HEAD ORIG_HEAD description index logs refs
我不会描述文件夹中的所有项目。但是我们感兴趣的文件夹是objects
文件夹。如果您检查对象文件夹的内容,
$ ls -C .git/objects
09 24 28 45 59 6a 77 80 8c 97 af c4 e7 info
11 27 43 56 69 6b 78 84 91 9c b5 e4 fa pack
它包含许多以两个字符命名的文件夹。Git存储的对象的前两个字母是哈希,这些哈希作为目录名称。
我不会描述这些对象文件如何生成。GIT有一个好指南。
提示:如果您想了解 .git 文件夹中的其他文件的详细信息,请查看 http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html。