预接收挂钩以防止重新出现错误的修订

时间:2012-07-10 18:07:18

标签: git githooks

假设我必须使用git filter-branch从修订历史记录中删除文件。我想确保我的所有协作者在再次推送之前更新所有本地副本。显而易见的方法是在主仓库上使用预接收挂钩,以确保引入问题文件的修订版的原始版本ID永远不会再次出现。

我该如何写这个钩子?

1 个答案:

答案 0 :(得分:1)

我强烈支持偏执狂。这写了,我希望你的贡献者会注意到“你的分支已经分歧”警告或他们的合并提交突然引入数百个新SHA1哈希的事实。

以下内容应该可以帮助您完成大部分工作。我很遗憾无法立即对其进行测试,但git-receive-packgithooks的手册页很有用,as was this example:

#!/bin/sh
while read oldrev newrev refname
do
    git rev-list ^$oldrev $newrev | grep "<problem-hash>"
    if test $? = 0; then
        echo "Problematic hash found. Please contact the maintainer."
        exit 1
    fi
done

使用预接收搜索文件本身:

#!/bin/sh
while read oldrev newrev refname
do
    git diff $oldrev $newrev --name-only | grep "<full_file_path>"
    if test $? = 0; then
        echo "Problematic hash found. Please contact the maintainer."
        exit 1
    fi
done