我有一个 git 存储库,包括大约一百个 .cpp 和 .h 文件。每个文件都有一个包含许可证数据的短标题。我想用几行元数据来扩展这部分,以显示上次创建和修改特定文件的日期。
是否有在不与 git 冲突的情况下自动管理此功能的好做法?
使用 git 过滤器。Git Book 有一个例子正是这样做的。请参阅 https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes,从"另一个有趣的示例获得$Date$关键字扩展,RCS样式"开始。
有两个过滤器,一个用于在将数据添加到提交之前过滤数据(清理过滤器(,另一个用于从提交到工作树中签出文件(涂抹过滤器(。获取脚本并配置筛选器:
$ git config filter.dater.clean clean_date
$ git config filter.dater.smudge expand_date
这可以通过 git 钩子来完成。
假设您的所有文件都遵循一个模板。 例如:
/**
* Some license information
*
* Last update: Thu, Jun 28, 2018 8:19:47 PM
*/
// Code comes here...
使用简单的脚本.git/hooks/pre-commit
创建一个可执行文件,以替换"上次更新:"行:
#!/bin/sh
d=$(date)
git diff --cached --name-only --diff-filter=ACM |
xargs sed -i "s/* Last update:.*/* Last update: $d/"