我正在尝试用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
)时,我不想担心保持元数据文件是最新的......元数据应随文件一起移动。
答案 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