gpt4 book ai didi

git - 如何在 Git 中记录文件

转载 作者:行者123 更新时间:2023-12-04 06:17:24 26 4
gpt4 key购买 nike

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

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

最佳答案

只需保存在单独的文件中,并执行一个pre-commit Hook 来修复它们。

您可以使用 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) 了解详情。这是留给读者的练习。

关于git - 如何在 Git 中记录文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com