我在GIT中有这个场景:
我希望在推送中更改特定文件时“执行某些操作”。 例如,如果更改了.sql文件,则必须将其转储到数据库中。
我在GIT中使用'post-receive'钩子,声明如下:
DUMP=$(git diff-tree --name-only -r -z master dump.sql);
if [ -n "$DUMP" ]; then
// using the new dump.sql
fi
如何访问刚挂钩的新dump.sql?
答案 0 :(得分:7)
您可以使用以下命令从版本$ rev检索文件dump.sql:
git cat-file blob $rev:dump.sql
除了推送主人之外,还会调用post-receive hook ...希望你在某个地方检查你正在处理更新的主参考。作为一种风格问题,我使用传递给钩子的新修订版值,而不是直接从钩子中引用master。
通常我会写一个这样的post-receive钩子:
while read oldrev newrev refname; do
if [ "$refname" = "refs/heads/master" ]; then
# definitely updating master; $oldrev and $newrev encompass the changes
if git diff-tree --name-only -r -z $oldrev $newrev dump.sql; then
# dump.sql changed...
fi
fi
done
重要的是,这也可以应付单次推送,一次性发送几次提交给主人 - 你在问题中显示的命令只查看了master上的最后一次提交。