假设我想编写一个小助手,允许以可以传播到克隆的方式将一些元数据附加到存储库refs
。简单示例(一个git-notes克隆原型,它甚至没有将注释附加到任何其他 git 对象):
hash=$(echo "Just a comment" | git hash-object -w --stdin)
git update-ref refs/comments/just $hash
即我创建了一个blob
带有哈希的对象hash
并引用它,refs/comments/just
因此git fsck --unreachable
不会抱怨它,git gc
也永远不会prune
成为对象。
但这当然是一个非常简单的例子,实际上我对更复杂的功能感兴趣。在那里,我的问题是,我可以“合法”做什么,我应该绝对避免做什么?
例如,SE 上的几篇帖子是关于用户必须从重复tree
条目中恢复的。因此,一个“不要”就是“不要创建tree
带有重复条目的”。另一个例子是“确保你的对象是可访问的,所以不会git prune
删除它们”。还有什么?
我可以创建自定义对象类型吗?对树中的 blob 使用“无效”文件模式?我在哪里可以找到概述?或者我应该git-fsck
手动检查 's source 以查看什么构成错误(以及哪些是可以忽略的)?