是否可以在过去的提交中运行git commit-msg钩子?

时间:2011-10-22 19:16:06

标签: git

我有一个commit-msg钩子,我为所有本地提交运行,对于某个项目,我需要运行。问题是,当我从其他叉子拉进来时,我的一些同胞没有运行这个commit-msg钩子。到目前为止,我一直在做

$ git rebase --interactive $commit_parent

如同here非常相似。选择未正确完成的提交,重新编辑等。一切都非常可行,但我手工操作也很乏味。

我该如何自动化?钩子不需要疏忽。

2 个答案:

答案 0 :(得分:3)

这可以使用自定义编辑器以自动方式实现:

#!/bin/bash
# Save to rebase_editor.sh, chmod +x it
file="$1"
if head -n1 "$file" | egrep -q '^pick' "$file" ; then
  perl -pi -e 's/^pick/r/' "$file"
fi

然后运行:

GIT_EDITOR=./rebase_editor.sh git rebase -i <some-rev>

在第一次调用时,我们的“编辑器”将获得rebase -i的提交列表,其中每个pick都会更改为rreword) 。在这种模式下,git将立即开始调用我们的“编辑器”,其中包含每个重新提交的提交消息(并且没有任何暂停,它通常在pick模式下进行,您可以在其中更改提交本身)。

答案 1 :(得分:0)

我认为这很容易,给出了“hooks”手册页中钩子的描述:

It takes a single parameter, the name of the file
that holds the proposed commit log message.

只需为每次提交运行hooks脚本:

git rev-list HEAD |while read h; do
    git show --format='%B' $h > tmp && sh .git/hooks/commit-msg.sample tmp
done
rm tmp