如何在Git中保存文件注释

时间:2011-08-15 04:30:12

标签: git

我正在尝试用Git做一些不寻常的事情(?)---用Git存储我的多媒体文件和照片以及一些pdf文件。我希望为每个文件保留一些元数据(例如,带有照片:我想保留一些照片;使用pdf文件:有关文件内容的一些信息,以便以后轻松搜索)。在svn中,您可以使用svn属性来存储有关文件的元数据(我认为)。我如何在Git中做同样的事情?无法找到任何 easy 方式! git notes看起来很有前途,但它只将注释与对象(提交)相关联。我想要个别文件的笔记。

更新:我想要为文件/路径的元数据保留单独的文件! :-)我想以某种方式保存文件/路径的信息。像svn属性(svn propset caption "In the Golden Gate" foo.jpg)。更准确地说,当我移动文件(git mv path1/file path2/file)时,我不想担心保持元数据文件是最新的......元数据应随文件一起移动。

3 个答案:

答案 0 :(得分:1)

听起来你需要一个Git之外的解决方案来处理各种文件类型的编辑元数据。无论是那个,或者你可以为你想要元数据的每一个媒体创建一个文本文件,但这听起来不切实际。

答案 1 :(得分:1)

只需保留单独的文件,然后执行pre-commit挂钩修复它们。

您可以使用git diff --cached -M --summary

检测重命名的文件(在索引/缓存中)
[flames]$ git diff --cached -M --summary
rename a => b (100%)

然后做一些花哨的东西(我建议使用perl,但我在这里使用sed只是为了演示)

[flames]$ git diff --cached -M --summary | \
> grep rename | \
> sed 's/^ rename \(.*\) => \(.*\) (.*/s\/^\1$\/\2\//'
s/^a$/b/

在笔记文件上使用此正则表达式(未测试):

#!/bin/sh
REGEX="`git diff --cached -M --summary | \
     grep rename | \
     sed 's/^ rename \(.*\) => \(.*\) (.*/s\/^\1$\/\2\//'
    `"
sed -i -e "$REGEX"  note-file
git add note-file
exit 0

更易于解析的格式是--raw格式。

[flames]$ git diff --cached -M --raw
:100644 100644 b53a58b... 3f063ab... M  wxyz
:100644 100644 e69de29... e69de29... R100       a       b

只需在第5列搜索R. man diffcore(7)了解详情。这是留给读者的练习。

答案 2 :(得分:0)

看一下gibak:https://github.com/mfp/gibak