如何在不浪费空间的情况下复制/克隆git存储库?

ski*_*ppy 7 git

我正在做一些工作来跟踪git支持工具中的感知错误,我想复制一个存储库(可能多次)用于实验目的.我希望将硬链接创建到原始存储库对象数据库,以免浪费磁盘空间存储具有相同SHA值的相同对象的多个副本.git clone很好地完成了这个,但不幸的是我似乎无法找到一种方法让git clone给我一个像原始存储库一样的存储库的新副本:

  1. 克隆指向复制的存储库作为其来源,但我希望它与复制的存储库具有相同的来源
  2. 克隆只有一个分支,但我希望它拥有复制的存储库的所有分支

我可以通过使用git clone --mirror来改善其中一些,但这只会创建一个裸存储库,我正在尝试的存储库不是裸的,我试图调试的支持工具不能在裸机上运行库.

我想写一个快速shell循环来使一个新的对象数据库充满原始对象数据库的硬链接,然后从原始.git目录复制其他所有内容,然后进行git checkout,但我担心这是复杂到足以容易出错,而且我不太了解正确执行这种低级手术,并且会构建一个存在细微错误的存储库.理论上,这种方法应该有效吗?

更好的是,有没有办法将选项传递给git clone以使其能够满足我的需求?

有没有办法可以创建一个新的存储库,但告诉它它的对象数据库在另一个目录中,基本上告诉它从原始存储库共享对象数据库?

如果上述方法都不起作用,那么我只剩下一个cp -pr,它将消耗大量空间并且耗时.

Pat*_*otz 5

我想你在找

git clone --reference=/path/to/existing/repo url
Run Code Online (Sandbox Code Playgroud)

在git lingo中这称为使用"替代".这个选项存在潜在问题,如git clone帮助中所述,但它可能适合您的目的.

您可能也对Dustin的助手git-alternates感兴趣.