【问题标题】:Git hooks for metadata storage/retrieval用于元数据存储/检索的 Git 挂钩
【发布时间】:2010-02-26 14:55:09
【问题描述】:

git 不可避免的怪癖之一是它无法存储和检索有关文件的元数据。例如,在 Mac 上,标签与“扩展属性”一起存储(可通过 xattr 访问),如果文件受到检出的影响,任何 checkout/reset/merge/pull 命令都会删除这些属性。

我环顾四周,看看是否有人已经编写了元数据保存脚本,但我想不通。

所以我想做的是使用 Git 的钩子系统:

  1. 提交文件时读取扩展属性,
  2. 将属性写入存储在存储库中的文件,该文件也被提交,
  3. 将扩展属性应用于在合并/签出/重置中修改的文件。

我应该使用哪些钩子? post-receivepre-commit 是我所需要的吗? pre-commit 是否也可以在提交中添加文件(即,在写入新属性之后)?

【问题讨论】:

  • 为什么投反对票?如果问题不满意,请发表评论,以便我更正。

标签: git metadata


【解决方案1】:

gibak tool 使用pre-commitpost-checkout 让其ometastore 工具保存/恢复元数据(可选地包括xattrs)。

你不想要post-receive。它在推送的远程端运行。它为裸存储库运行,因此它没有尝试从推送的提交内容中更新任何文件的业务。在post-checkout 执行此操作,您知道您将有可用的工作树。

【讨论】:

  • post-merge 也是应该使用的一种。见 githooks(5) ftp.kernel.org/pub/software/scm/git/docs/githooks.html
  • @Seth Johnson:很好的收获。您可以让post-merge 执行与post-checkout 相同的工作来重建在合并重写文件时丢失的任何元数据。不过,合并元数据可能会很棘手,具体取决于您选择的工具如何存储它并使其可用于查看/比较。
  • 如果其他人对 gibak 这样的工具感兴趣,Slug (github.com/hbaragar/slug) 看起来像是一个最近维护的 gibak 分支,能够备份到远程存储库。跨度>
【解决方案2】:

metastore 能够保存和恢复文件元数据,将其存储在单独的文件中(您可以将其包含在提交中)

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2021-11-27
    • 2012-05-17
    相关资源
    最近更新 更多