代码之家  ›  专栏  ›  技术社区  ›  Aero Wang

如何在服务器端创建一个Git钩子,以便在收到推送后进行拉取(在需要根权限修改的路径中)?

  •  2
  • Aero Wang  · 技术社区  · 6 年前

    我试过用 post-receive post-update 到:

    cd "/home/servers/a"
    git pull
    exit
    

    但它似乎不起作用。我想这可能是因为 邮政收货 更新后 不会在服务器收到推送后触发,或者可能是因为 git pull 要在服务器上成功运行,我仍然需要输入密码(在本例中,我如何在脚本文件中保存密码)。

    1 回复  |  直到 6 年前
        1
  •  2
  •   VonC    6 年前

    确保脚本是可执行的(在 remote_repo.git/hooks )并执行:为此,一个简单的回声“测试”就足够了。

    然后,在执行 git pull ,指定工作树和git dir。

    #!/bin/bash
    cd "/home/servers/a"
    echo "pulling in $(pwd)"
    git --work-tree=/home/servers/a --git-dir=/home/servers/a/.git pull
    

    不需要 exit .

    pull不需要密码,因为该repo的远程源站应该是指向您刚刚推到的repo的相对路径:

    cd "/home/servers/a"
    git remote -v
    

    你应该看看 /path/to/remote_repo.git .


    对于由根管理的路径,可能的解决方案是在hooks文件中使用 sudo git --work-tree=/home/servers/a --git-dir=/home/servers/a/.git pull ,修改后 /etc/sudoers 用:

    dev ALL=(ALL) NOPASSWD: git
    

    (如“中所述) Allow certain guests to execute certain commands “”
    如果 git 根深蒂固 $PATH 那就行了。