我正在使用Centos5机器,我使用命令
创建了空的裸存储库$ mkdir test_repo.git
$ cd test_repo.git
$ git --bare init
它只包含git元数据。然后我使用命令
在同一系统上启动了git守护程序$ git daemon --reuseaddr --base-path=/data/test_work/ --export-all --verbose --enable=receive-pack
从局域网内的另一台机器我克隆了空的存储库添加一些文件提交它并使用命令推送到主机
$ git clone git://<system_ip where git dameon run>/test_repo.git
添加并提交一些文件并推送到git
$ git push origin master
然后我从另一台机器克隆它运行良好我得到了所有的推动。
但是当我在运行git-daemon的机器中看到实际的test_repo.git时。它只包含保存我提交的文件的git-meta数据?
请告诉我实际数据为git-daemon和裸仓库保存的位置?它是在我的机器本身还是在任何其他位置?
答案 0 :(得分:1)
文件存储在Git对象存储中,如果它是一个裸存储库,则不可见 。他们没有签出,没有工作副本,只有数据&amp;元数据,以二进制格式保存,以节省空间和提高速度。
真实数据位于objects/pack
目录。
有关详细信息,请参阅How git stores your data。
答案 1 :(得分:1)
Git使用正常.git
目录来存储元数据。如果删除工作目录中除此目录以外的所有内容,仍可以使用git checkout
恢复已提交的文件。
您创建了所谓的裸存储库(选项--bare
)。它仅包含.git
元数据。它并不意味着直接用于工作,因此文件只会浪费存储空间,并且当有人更新存储库时,更新这些文件将是无用的工作。如果我们收到多个不同分支的提交,我们还应该检查哪个分支!?!提交和其他git对象专门存储在objects/
子目录下,以提交SHA1的第一个字母开头(例如,您可以在目录{{1}中找到带有SHA1 ffee0ccd6cce082784d515a6321a7afbfdc0dde0
的git对象在打包格式的objects/ff/ee0ccd6cce082784d515a6321a7afbfdc0dde0
目录中(多个对象放在同一个高度压缩的文件中以节省存储空间)。
所有内容都存储在您提交的裸目录中。除非你这么说,否则没有任何东西被推到网络上的某个秘密神秘位置(然后位置也不是秘密,而是根据你在命令行中的说法使用直接URL或配置的远程名称objects/pack/
自动定义成为您最初克隆的存储库。)