0

我正在使用 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 和裸仓库保存的位置?它是在我的机器上还是在任何其他位置?

4

2 回答 2

1

文件存储在 Git 对象存储中,如果它是一个裸存储库,则不可见。它们没有被签出,没有工作副本,只有数据和元数据,以二进制格式保存以节省空间并提高速度。

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

有关详细信息,请参阅git 如何存储您的数据

于 2013-02-26T08:10:04.863 回答
1

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

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

一切都存储在您提交的裸目录中。除非您告知,否则不会通过网络将任何内容推送到某个秘密的神秘位置(然后该位置也不是秘密的,而是基于您在命令行中所说的,使用直接 URL 或配置的远程名称,并origin自动定义为您的存储库最初克隆)。

于 2013-02-26T08:10:38.690 回答