当前位置 : 主页 > 网页制作 > HTTP/TCP >

如何在post-receive钩子中使用GIT访问存储库文件

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有GIT的这个场景: 我希望在推送中更改特定文件时“执行某些操作”. 例如,如果更改了.sql文件,则必须将其转储到数据库中. 我在GIT中使用’post-receive’钩子,声明如下: DUMP=$(git dif
我有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?

您可以使用以下命令从版本$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上的最后一次提交.

网友评论