【问题标题】:git hooks : is there a clone hook?git hooks:有克隆钩子吗?
【发布时间】:2012-04-30 23:12:19
【问题描述】:

我们想在外部数据库中存储一些关于提交的元信息。在克隆或结帐期间,应引用此数据库,我们将元信息复制到已克隆的 repo 中的文件中。数据库是必需的,而不仅仅是为了索引和搜索等而使用文件......

我想如果有一个克隆钩子,我们可以触发它。我在 .git/hooks 的示例中找不到克隆钩子。有吗?结帐后挂钩是客户端唯一的可能性吗?

【问题讨论】:

    标签: git githooks git-clone


    【解决方案1】:

    当您克隆远程存储库时,您无法运行任何客户端挂钩,因为挂钩位于您的工作副本的本地,并且您是从头开始创建的。当您从远程存储库新更改时,git 将运行您本地的 post-merge 挂钩(如果存在)。

    作为 pull 操作的结果,服务器上没有运行任何东西。 push 操作将触发服务器的 updatepost-update 挂钩。

    请参阅Git Book 了解更多信息。

    【讨论】:

      【解决方案2】:

      不,没有任何克隆钩子。

      【讨论】:

        【解决方案3】:

        好的,一种方法是使用clone --template 选项。

        指定将客户端挂钩存储为--template 开关的值的位置。钩子被复制到克隆中,并立即触发 post-checkout 钩子!

        【讨论】:

        • 但是模板目录不能在您正在克隆的存储库中 - 在您克隆之前它必须已经存在于文件系统中。
        • stackoverflow.com/a/2141577/1183537 帮助了我很多,更多的澄清,并解决了你所说的@chrishiestand
        【解决方案4】:

        我迟到了,但有一个解决方法:

        1. 捕获git clone 执行并使用trap set_var_on_git_clone DEBUG 设置变量,其中set_var_on_git_clone 是用户定义的函数。 (例如https://gist.github.com/KeyAmam/a6afcabc3a724fc4a541aca7629c3ff6

        2. 检查post-checkout 脚本中的变量并在案例中做一些事情。清除脚本末尾的变量。 (例如https://gist.github.com/KeyAmam/6a0e8805c0b6a662adb6bcf8118a089a

        这仅适用于 Bash,但您可以在其他 shell 中执行类似的操作。

        【讨论】:

          【解决方案5】:

          从 git 版本 1.6.3 开始,post-checkout 挂钩在 git-clone 上运行(在没有 --no-checkout 的情况下运行)。

          它也在 git-clone[1] 之后运行,除非使用了 --no-checkout (-n) 选项。给钩子的第一个参数是 null-ref,第二个是新 HEAD 的 ref,flag 始终为 1。

          https://git-scm.com/docs/githooks#_post_checkout

          【讨论】:

            猜你喜欢
            • 2021-03-02
            • 1970-01-01
            • 1970-01-01
            • 2016-02-14
            • 2020-05-21
            • 2019-01-30
            • 1970-01-01
            • 1970-01-01
            • 2015-09-23
            相关资源
            最近更新 更多