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

Ran*_*ize 3 git git-post-receive

我有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
Run Code Online (Sandbox Code Playgroud)

如何才能访问刚挂钩的新dump.sql?

ara*_*nid 7

您可以使用以下命令从版本$ rev检索文件dump.sql:

git cat-file blob $rev:dump.sql
Run Code Online (Sandbox Code Playgroud)

除了推送主人之外,还会调用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
Run Code Online (Sandbox Code Playgroud)

重要的是,这也可以应付单次推送,一次性发送几次提交给主人 - 你在问题中显示的命令只查看master上的最后一次提交.