代码之家  ›  专栏  ›  技术社区  ›  p7adams

用Husky设置预推钩,以防止推到主分支

  •  0
  • p7adams  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  4
  •   ack_inc    6 年前

    尝试将预推挂钩更改为: "npm run lint && git branch | grep \"*\" | egrep -v \"^* master$\""

    这将导致 git push 当当前分支为主分支时失败

        2
  •  1
  •   Christian Chandra    5 年前

    我所做的是制作一个预推bash脚本,并将其提交到存储库中。然后使用husky参数从husky预推钩子调用此脚本。

    这是我的哈士奇配置包内。json(如果需要,可以设置单独的配置)

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

    如您所见,我有两个脚本,一个用于预推,另一个用于预提交。

    这是我的 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
    

    • 这个脚本将阻止任何试图推到某个分支的人(在我的情况下,我不希望任何人——包括我自己——直接推到某个分支) master develop 分支机构)。他们需要在自己的分支中工作,然后创建拉请求。
    • 此脚本将阻止任何试图推送到与其当前活动分支不同的分支的人。例如,您在分行 fix/someissue 但是你打错了 git push origin master .


    https://github.com/talenavi/husky-precommit-prepush-githooks

    推荐文章