Настройте предварительный толчок крючком с помощью Husky, чтобы предотвратить толкание в мастер ветку

Можно ли настроить предварительный толчок крючком с помощью Husky, чтобы предотвратить толкание по мастеру по ошибке?? Хаски документация очень плохая, поэтому я не смог найти ответ.

Прямо сейчас у меня есть хаски для коммитов и толчков:

 "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "pre-push": "npm run lint"
    }
  },
  "lint-staged": {
    "linters": {
      "*.{js,json,scss,md}": [
        "prettier --write",
        "git add"
      ],
      "*.js": [
        "eslint -c .eslintrc --fix",
        "echo test",
        "git add"
      ]
    }
  }

1 ответ

Попробуйте сменить крючок предварительного толчка на: "npm run lint && git branch | grep \"*\" | egrep -v \"^* master$\""

Это приведет к git push потерпеть неудачу, когда текущая ветвь является главной

Что я сделал, так это сделал сценарий bash перед запуском и зафиксировал его в репозитории. Затем вызовите этот скрипт из хаски с параметром хаски.

Это моя хриплая конфигурация внутри package.json (вы можете установить отдельные конфигурации, если хотите)

"husky": {
    "hooks": {
        "pre-commit": "./commands/pre-commit",
        "pre-push": "./commands/pre-push $HUSKY_GIT_STDIN"
    }
},

как вы можете видеть, у меня есть 2 сценария, один для предварительного нажатия и один для предварительной фиксации.

А это мой commands/pre-push сценарий

#!/bin/bash

echo -e "===\n>> Talenavi Pre-push Hook: Checking branch name / Mengecek nama branch..."

BRANCH=`git rev-parse --abbrev-ref HEAD`
PROTECTED_BRANCHES="^(master|develop)"

if [[ $1 != *"$BRANCH"* ]]
then
  echo -e "\n You must use (git push origin $BRANCH) / Anda harus menggunakan (git push origin $BRANCH).\n" && exit 1
fi

if [[ "$BRANCH" =~ $PROTECTED_BRANCHES ]]
then
  echo -e "\n Cannot push to remote $BRANCH branch, please create your own branch and use PR."
  echo -e " Tidak bisa push ke remote branch $BRANCH, silahkan buat branch kamu sendiri dan gunakan pull request.\n" && exit 1
fi

echo -e ">> Finish checking branch name / Selesai mengecek nama branch.\n==="

exit 0

Скрипт в основном будет делать 2 вещи:

  • Этот скрипт заблокирует всех, кто пытается нажать на определенную ветку (в моем случае я не хочу, чтобы кто-либо, включая меня, нажимал прямо на master а также developфилиал). Им нужно работать в своей собственной ветке, а затем создать запрос на перенос.
  • Этот скрипт заблокирует всех, кто пытается перейти в ветку, отличную от их текущей активной ветки. Например вы в филиалеfix/someissue но вы по ошибке набираете git push origin master.

Более подробные инструкции вы можете найти в этой статье:
https://github.com/talenavi/husky-precommit-prepush-githooks

Другие вопросы по тегам