我正在研究中man gitglossary
,而这个术语使我难以理解-因为它在术语表中根本没有定义。
它仅被引用两次(添加了星号):
alternate object database
Via the **alternates mechanism**, a repository can inherit part of its
object database from another object database, which is called
"alternate".
repository
A collection of refs together with an object database containing
all objects which are reachable from the refs, possibly accompanied
by meta data from one or more porcelains. A repository can share an
object database with other repositories via **alternates mechanism**.
这里所说的“替代机制”是什么?
简短的答案是,您可以将任何现有git存储库指向任意数量的其他现有git存储库(尤其是它们的.git/objects
目录),之后git将在您自己的.git/objects
目录和所有其他列出的目录中搜索对象(按列出顺序) )。
很难描述的是为什么您可能要这样做。
如果您知道git在内部如何工作,它会有所帮助。在git中,标识符倾向于很快地将其哈希ID解析为:
$ git rev-parse master
3266f25e27f69edbfc513a3b3cfd3987a89beff2
然后,Git查找与此ID对应的对象。在这种情况下,对象是提交。如果您的目标是对提交执行某些操作(例如将其检出或与其他提交进行比较),则git会读取对象,该对象包含树的ID。Git然后读取树对象;它包含其他树和文件的名称(“ blob”)及其ID,而git读取这些对象以查找文件,并递归地找到子树及其文件。
现在假设您已经拥有一个非常大的存储库的副本,并且无论出于何种原因,您都想要再次对其进行克隆(也许有一个单独的克隆用于在单独的分支中工作)。1您可以告诉git所有原始对象在第一个存储库中可用,而不是对原始存储库进行第二次完整复制。一旦git有alternates条目,它将能够找到那些对象,而无需下载它们。
当然,您在第二个克隆中创建的新对象将只进入第二个克隆中。但这节省了大量时间和空间。
(一台机器上的“共享”克隆通常使用Unix样式的硬链接直接链接到另一个克隆的对象,但是,如果不可能,则alters机制提供了另一种做同一件事的方法。alternate的危险在于如果移除了第一个克隆,则对象消失;硬链接没有此缺陷。--reference
克隆也使用替代机制。)
至于:
定义它的官方文档在哪里?
最好的答案可能是“从源头”。:-)
1既然git能够从单个克隆中提供多个工作树,那么它的重要性已不如从前。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句