Git的“替代机制”是什么?

通配符

我正在研究中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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章