git clone --bare from ssh: 对象文件夹为空

git clone --bare from ssh: objects folder empty

我在服务器上有一个工作目录,我可以使用交互式 ssh 访问它或使用 sshfs 安装我的家,我想创建一个裸存储库来开始共享它。

正在做

git clone --bare mount_point/path

git clone --bare ssh://user@server/path

给出两个不同的结果。特别是,主要区别在于对象文件夹。第一个有 000b、...子文件夹和 pack 子文件夹中的某些文件。第二种情况只有 infopackpack 中的文件与第一种情况不同。因此,两个克隆的裸仓库的大小不同。

尽管如此,我都可以成功地执行 git log 或 git diff。

谁能告诉我发生了什么事?可能是 git-clone over ssh 压缩了存储库中的更多对象吗?还是我在某处丢失了信息?

非常感谢

git 在处理相同 volumes/same 计算机上的存储库时优化克隆的存储库存储。查看 --no-hardlinks--localgit clone --help 的选项。实际上,可以强制它生成 "real copy",但通常你不需要这样做。

更新:好的,没有硬链接。在网络传输之前 git 打包对象,在接收方丢失,并且这些包在接收时存储,没有解包。 git gc 做同样的事情。 .git/objects/pack/ 包含压缩对象,顾名思义。要查看特定包文件的内容,请使用 git verify-pack -v .git/objects/pack/pack-<smth>.idx。检查 this doc 以获得教程。