Git钩子用于元数据存储/检索

14

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

我查看了一下是否已经有人编写了保存元数据的脚本,但是没有找到。

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

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

我应该使用哪个hook?我只需要post-receivepre-commit吗?pre-commit是否也可以在写入新属性后将文件添加到提交中?


1
为什么要点踩?如果问题不满意,请留下评论,以便我进行更正。 - Seth Johnson
2个回答

5

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

不要使用 post-receive。它在推送时运行于远程端,仅适用于裸仓库,因此不能尝试从推送的提交内容中更新任何文件。请在 post-checkout 中进行操作,这样您就知道将有一个可用的工作树。


1
post-merge 这个钩子也应该被使用。参见 githooks(5) http://ftp.kernel.org/pub/software/scm/git/docs/githooks.html - Seth Johnson
@Seth Johnson:干得好。你可以让post-merge做与post-checkout相同的工作,以重建合并重写文件时丢失的任何元数据。合并元数据可能会很棘手,这取决于您选择的工具如何存储它并使其可供查看/区分。 - Chris Johnsen
1
如果其他人对像gibak这样的工具感兴趣,Slug(https://github.com/hbaragar/slug)似乎是一个更近期维护的gibak分支,具有备份到远程存储库的功能。 - mormegil

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接