0

假设我不得不使用git filter-branch从修订历史中删除文件。我想确保我的所有合作者在再次推送之前更新他们所有的本地副本。执行此操作的明显方法似乎是在主存储库上使用 pre-receive 挂钩,以确保引入问题文件的修订的原始修订 ID 永远不会再次出现。

我怎么写那个钩子?

4

1 回答 1

1

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

像下面这样的东西应该能让你大部分时间到达那里。不幸的是,我现在无法对其进行测试,但是git-receive-packandgithooks的手册页很有帮助,就像这个例子一样:

#!/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
于 2012-07-11T03:51:17.303 回答