我不确定如何提出这个问题,如果不清楚则道歉.如果你git clone是一个有一堆悬空物的回购,你会克隆那些吗?相反的情况也是如此.如果你做了一个git gc并将其推送给其他人,那么他们的回购会失去任何git gc可以清理的东西吗?
我猜这些都不会发生,但我找不到任何关于这种情况的文档.
我发现一些信息似乎暗示大多数协议都git clone为您提供了一个干净的仓库,但如果您使用文件路径指定文件,则会复制所有内容.
The main reason to specify the file:// prefix is if you want a clean copy of the
repository with extraneous references or objects left out.
Run Code Online (Sandbox Code Playgroud)
Git clone不会克隆悬空对象.
而你git gc将不会以任何方式影响远程回购,当你推到它,除非你推使悬挂物体,然后git gc是上远程运行删除这些文件.
除非....
它是共享克隆(使用--shared或-s标志指定)或本地克隆(--local或-l).来自文档:
-l
当要克隆的存储库位于本地计算机上时,此标志会绕过正常的"git aware"传输机制,并通过制作HEAD副本以及对象和refs目录下的所有内容来克隆存储库..git/objects /目录下的文件是硬链接的,以便在可能的情况下节省空间.现在,当使用/ path/to/repo语法指定源存储库时,这是默认设置,因此它本质上是一个无操作选项.强制复制而不是硬链接(如果你试图备份你的存储库,这可能是合乎需要的),但仍然避免使用通常的"git aware"传输机制,可以使用--no-hardlinks.
-s
当要克隆的存储库位于本地计算机上而不是使用硬链接时,会自动设置.git/objects/info/alternates以与源存储库共享对象.生成的存储库在没有任何自己的对象的情况下开始.
注意:这是一个可能危险的操作; 除非你明白它的作用,否则不要使用它.如果使用此选项克隆存储库,然后在源存储库中删除分支(或使用使任何现有提交未引用的任何其他git命令),则某些对象可能会变为未引用(或悬空).这些对象可以通过自动调用git gc --auto的常规git操作(例如git commit)来删除.
因此,当您执行a时,git clone /path/to/repo您正在复制对象(或创建硬链接),在这种情况下您将获得悬空对象.在其他情况下(使用git协议,ssh,文件协议等),你永远不会得到克隆中的悬空对象.
在这里查看运输是如何发生的 - http://progit.org/book/ch9-6.html
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |