我在服务器上有一个工作目录,我可以使用交互式 ssh 访问它,也可以使用 sshfs 安装我的家,我想创建一个裸存储库来开始共享它。
正在做
git clone --bare mount_point/path
和
git clone --bare ssh://user@server/path
给出两个不同的结果。特别是,主要区别在于对象文件夹。第一个有
00
, 0b
, ... pack
中的子文件夹和某些文件子文件夹。而第二个只有 info
和 pack
, 以及 pack
中的文件与第一种情况不同。因此,两个克隆的裸仓库的大小是不同的。不过,在这两种情况下,我都可以成功地执行 git log 或例如 git diff。
谁能告诉我发生了什么?是不是 git-clone over ssh 压缩了存储库中的更多对象?还是我在某处丢失了信息?
非常感谢你
最佳答案
git 在处理相同卷/相同计算机上的存储库时会优化克隆存储库存储。看--no-hardlinks
, --local
等git clone --help
的选项.实际上,可以强制它制作“真实副本”,但通常您不需要这样做。
更新:好的,没有硬链接(hard link)。在网络传输之前 git 打包对象,在接收端丢失,并且这些包按接收到的方式存储,无需解包。 git gc
做同样的事情。 .git/objects/pack/
顾名思义,包含打包的对象。要查看特定包文件的内容,请使用 git verify-pack -v .git/objects/pack/pack-<smth>.idx
.查看this doc教程。
关于git clone --bare 来自 ssh : objects folder empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37176097/