【问题标题】:Execute a script after every git push每次 git push 后执行一个脚本
【发布时间】:2017-01-01 08:52:47
【问题描述】:

有一个服务器正在运行并且上面有一个 git 实例。我希望每次用户执行 git push 到服务器时运行一个脚本。我希望我的脚本被执行然后 git push 继续。 有什么解决办法吗?

【问题讨论】:

    标签: linux git bash


    【解决方案1】:

    我不确定您是否希望 scipt 在推送之前或之后运行。所以这是我对预推送的回答。但是如果你想要 post-push(即在 push 之后),你必须相应地更改 pre-push 挂钩以检查是否推送成功,然后你可以做 post-push 的事情。

    正如@Travis 所建议的,git hooks 是您正在寻找的那个。所以要执行一个脚本预推送,你要做的就是在.git/hooks中创建一个pre-push文件。因此,在这种情况下,将您的一堆代码放入 pre-post 脚本文件 .git/hooks/pre-push 并保存。然后通过chmod +x .git/hooks/pre-push 使其可执行。成功完成此操作后,您将能够看到每次执行 push 命令时脚本都会执行。

    PS:请注意,我还没有测试过这个整体,但预计会以这种方式工作。

    简而言之,假设您(Linux 用户)在项目目录中

    vim .git/hooks/pre-push # then add your code and save the file
                            # Also put the shebang on top to identify the interpreter
    chmod +x .git/hooks/pre-push # make it executable
    

    【讨论】:

    • 注意:imo,这适用于“pre-push”,但不适用于“post-push”
    • @mchen.ja 用于后推只需将脚本名称更改为post-push
    • 你能用什么版本的 git 成功测试它?我无法让它在 git 2.14.2(在 macOS 上运行)上运行。
    • @mchen.ja 显然我对后推挂钩是错误的。没有这样的存在。它的预推送将有助于实现需要检查是否推送成功blog.ittybittyapps.com/blog/2013/09/03/git-pre-push。将更新答案。感谢您指出这一点。
    【解决方案2】:

    您已标记此 GitHub,因此我假设您指的是公共 GitHub,而不是 GitHub 企业。

    您不能在 GitHub 的服务器上运行“服务器端”脚本,因为这显然是一个巨大的漏洞,但您可以设置一个 Web 挂钩来触发另一台服务器上的脚本。

    基本上,每当有人进行推送时,都会向特定的 URL 发送有关推送的数据。然后,您可以从中触发脚本。有关网络挂钩的更多信息,请参阅GitHub API docs

    【讨论】:

    • 其他服务器上的 git 怎么样,比如 dokku(docker),它提供了像 heroku 这样的 git 接口。 ?
    【解决方案3】:

    你应该看看 git hooks:

    8.3 Customizing Git - Git Hooks

    还有一个关于这项技术的网站:

    githooks.com

    【讨论】:

    • 如何在服务器端的 git hooks 上解决这个问题?我希望在服务器端触发操作
    猜你喜欢
    • 2010-12-20
    • 2011-07-20
    • 2014-03-25
    • 2023-04-01
    • 1970-01-01
    • 2013-05-27
    • 2014-10-08
    • 2010-12-19
    相关资源
    最近更新 更多