假设我必须使用git filter-branch
从修订历史记录中删除文件。我想确保我的所有协作者在再次推送之前更新所有本地副本。显而易见的方法是在主仓库上使用预接收挂钩,以确保引入问题文件的修订版的原始版本ID永远不会再次出现。
我该如何写这个钩子?
答案 0 :(得分:1)
我强烈支持偏执狂。这写了,我希望你的贡献者会注意到“你的分支已经分歧”警告或他们的合并提交突然引入数百个新SHA1哈希的事实。
以下内容应该可以帮助您完成大部分工作。我很遗憾无法立即对其进行测试,但git-receive-pack
和githooks
的手册页很有用,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