我有GIT的这个场景: 我希望在推送中更改特定文件时“执行某些操作”. 例如,如果更改了.sql文件,则必须将其转储到数据库中. 我在GIT中使用’post-receive’钩子,声明如下: DUMP=$(git dif
我希望在推送中更改特定文件时“执行某些操作”.
例如,如果更改了.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?
您可以使用以下命令从版本$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上的最后一次提交.