2013-02-26 101 views
0

我Centos5机器上工作,其中i使用命令哪里Git进程存储文件

$ 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 

从另一台机器我克隆是空repositry添加一些文件提交,并推动使用命令

$ 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和裸回购的位置?它是在我的机器上还是在其他位置?

回答

1

Git通常使用.git目录来存储元数据。如果在工作目录中删除除此目录以外的所有内容,仍然可以使用git checkout重新提交已提交的文件。

您创建了所谓的裸仓库(选件--bare)。它只包含.git元数据。它并不意味着用于直接工作,所以这些文件只会浪费存储空间,更新这些文件无论如何都会有人更新存储库。无论如何,如果我们收到多个不同分支的提交,我们应该检查哪个分支!?!提交和其他git对象专门存储在objects/子目录下,从你的提交SHA1的第一个字母开始(例如,你可以在目录objects/ff/ee0ccd6cce082784d515a6321a7afbfdc0dde0中找到带有SHA1 ffee0ccd6cce082784d515a6321a7afbfdc0dde0的git对象)或objects/pack/打包格式的目录(几个对象放入相同的高度压缩文件以节省存储空间)。

所有内容都存储在您提交的裸露目录中。没有什么东西会被推到网络上某个神秘的秘密位置,除非你这么说(然后这个位置并不是秘密的,而是根据你在命令行中说的话,使用直接URL或配置的远程名称origin自动定义为存储库你最初克隆)。

1

文件存储在Git对象存储中,并且如果它是裸回购,则不可见,因为它是。他们没有签出,没有工作副本,只有数据元数据,以二进制格式保存,以节省空间和增加速度。

真实数据在objects/pack目录中。

欲了解更多信息,请参阅How git stores your data