git 不可避免的怪癖之一是它无法存储和检索有关文件的元数据。例如,在 mac 上,标签存储有“扩展属性”(可通过 xattr
访问),如果文件受到 check out 的影响,任何 check out /重置/merge/pull 命令都会删除这些属性.
我环顾四周,看看是否有人已经编写了元数据保存脚本,但我一无所获。
所以我想做的是使用 Git 的钩子(Hook)系统来:
- 提交文件时读取扩展属性,
- 将属性写入存储在存储库中的文件,该文件也会提交,
- 将扩展属性应用于 merge/ check out /重置中修改的文件。
我应该使用哪个钩子(Hook)? post-receive
和 pre-commit
是我所需要的吗? pre-commit
是否也可以将文件添加到提交中(即,在写入新属性之后)?
最佳答案
gibak tool使用 pre-commit
和 post-checkout
让它的 ometastore 工具保存/恢复元数据(可选地包括 xattrs)。
您不需要post-receive
。它在推送的远程端运行。它为裸存储库运行,因此它没有尝试从推送提交的内容更新任何文件的业务。在 post-checkout
中执行此操作,您知道您将有可用的工作树。
关于用于元数据存储/检索的 Git Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19325518/