【问题标题】:How to add Server-side Custom Hooks in Gitlab?如何在 Gitlab 中添加服务器端自定义 Hooks?
【发布时间】:2020-08-22 12:34:25
【问题描述】:

我想要做的是我想将我的钩子添加到服务器中的 repo,以便克隆 repo 的人在推送到 Gitlab 服务器之前通过它。 到目前为止,我所做的是,在 /.git/custom_hooks 的 custom_hooks 文件夹中创建了 pre-receive 文件,并向其中添加了一些脚本。 以下是我的预收文件。

#!/bin/bash

zero_commit="0000000000000000000000000000000000000000"
excludeExisting="--not --all"

while read oldrev newrev refname; do
  # echo "payload"
  echo $refname $oldrev $newrev

  # branch or tag get deleted
  if [ "$newrev" = "$zero_commit" ]; then
    continue
  fi

  # Check for new branch or tag
  if [ "$oldrev" = "$zero_commit" ]; then
    span=`git rev-list $newrev $excludeExisting`
  else
    span=`git rev-list $oldrev..$newrev $excludeExisting`
  fi

  for COMMIT in $span;
  do
    for FILE  in `git log -1 --name-only --pretty=format:'' $COMMIT`;
    do
        echo "rejecting all pushes"
        exit 1
    done
  done
done
exit 0

然后我在本地 Windows 机器上克隆了 repo 并尝试推送它。但它没有产生预期的效果。它仍然被推送到服务器。

我是 Gitlab 和 Git Hooks 的新手。我不知道我的 pre-receive 文件是否错误或哪里出错了。请让我如何向服务器添加挂钩,以便它验证/适用于克隆我的仓库的人。 请帮忙。 提前致谢。

【问题讨论】:

    标签: bash gitlab githooks git-push git-clone


    【解决方案1】:

    请参阅https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks,其开头为:

    与许多其他版本控制系统一样,Git 有一种方法可以在发生某些重要操作时触发自定义脚本。这些钩子有两组:客户端和服务器端。客户端钩子由提交和合并等操作触发,而服务器端钩子在网络操作上运行,例如接收推送的提交。您可以出于各种原因使用这些挂钩。

    另见https://docs.gitlab.com/ee/administration/server_hooks.html

    【讨论】:

    • 能告诉我如何使它可执行吗?
    • sudo chmod +x /path/to/hook 其中/path/to/hook 是挂钩文件的完整路径。
    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    相关资源
    最近更新 更多