git克隆--共享和--引用之间有什么区别?
在阅读了文档之后,我仍然不太明白 区别在于git克隆--共享和--引用之间有什么区别?,git,Git,在阅读了文档之后,我仍然不太明白 区别在于--shared和--reference之间。他们看起来很相似 共享的和之间有什么区别 --参考选项? 在制作多个本地克隆时,它们是否可以用来节省驱动器空间 另一个本地克隆? 每个本地克隆是否可以签出不同的分支? 注意:我知道我可以使用多个具有截断 使用git clone--depth创建历史记录,但每个克隆仍然必须 为了做到这一点,我至少复制了一些历史,所以我 认为这可能不是节省驱动器空间的最佳方式(尽管 总比没有好) 背景 有时,我喜欢在一个文件夹中
--shared
和--reference
之间。他们看起来很相似
和之间有什么区别
--参考
选项?
git克隆
文档
我查了一下,看有没有我想要的东西
可以用
--共享
我看到有一个--共享选项:
当要克隆的存储库位于本地计算机上时,而不是使用硬拷贝
链接,自动设置.git/objects/info/alternates
以共享对象
使用源存储库。生成的存储库开始时没有任何
它自己的对象
这看起来有助于节省驱动器空间
具有不同签出的多个克隆,因为每个克隆共享
具有原始本地克隆的对象
--参考
然后我还看到了--reference
选项:
如果引用存储库位于本地计算机上,则自动设置
.git/objects/info/alternates
从引用中获取对象
存储库。将现有存储库用作备用存储库需要
要从正在克隆的存储库中复制的对象更少,从而减少了网络开销
和本地存储成本
注意:请参阅--shared
选项的注意事项
这意味着它将降低本地存储成本,因此这可能也很有用
好的。两个选项都会更新.git/objects/info/alternates
以指向源存储库,这可能很危险,因此文档中的两个选项都有警告说明
--shared
选项不会将对象复制到克隆中。这是主要区别
--reference
使用了一个额外的存储库参数。在克隆过程中,使用--reference
仍会将对象复制到目标中,但是您指定的对象是从引用存储库中已有的源中复制的。这可以通过使用--reference
将路径传递到更快的/本地设备上的存储库,从而减少源存储库的网络时间和IO
你自己看看吧
创建--共享
克隆和--引用
克隆。使用git Count objects-v
对每个数据库中的对象进行计数。您会注意到共享克隆没有对象,而引用克隆的对象数与源克隆的对象数相同。此外,请注意文件系统中每个文件的大小差异。如果要移动源代码,并在共享存储库和引用存储库中测试git日志
,则共享克隆中的日志不可用,但在引用克隆中工作正常。这确实是一个更清楚的答案:--reference
意味着--shared
参考的要点是在远程存储库的初始克隆期间优化网络I/O。
与上面的答案相反,我发现来自同一源的--共享和--引用存储库具有相同的大小,并且都没有对象。当然,如果对基于公共源的其他存储库使用--reference
,那么大小和对象将反映存储库之间的差异注意在这两种情况下,我们都没有在工作树中节省空间,只有.git/objects
继续维护此设置有一些细微差别-阅读线程了解更多详细信息。从本质上讲,这两个数据库应该被视为公共存储库,在重新打包/修剪/垃圾收集的情况下,小心地重写历史
在初始克隆后保持最佳磁盘空间使用率的工作流程似乎是:
牵引源
重新打包源
牵引辅助
git gc
在中学
不过,最好还是读一下这篇文章中的讨论
您可以通过将源的对象
目录的绝对路径放入secondary/.git/objects/info/alternates
并运行git-gc
(许多人使用git-repack-a-d-l
,这是由git-gc
完成的)向现有存储库中添加一个备用存储库
您可以通过在辅助文件中运行git repack-a-d
(no-l
),然后从alternates
文件中删除该行来删除备用文件。如线程中所述,可以有多个备用线程
我自己也没用过这么多,所以我不知道管理起来有多容易出错。你的问题的答案是