如何 运行 仅在子目录中预提交 husky

How to run husky pre-commit in child directory only

我们有一个具有如下文件夹结构的企业应用程序:

/项目
  .git
  /sub1
    ...Java 项目
  /sub2
    package.json
    ...Java脚本Backbone项目
  /sub3
    ...Java 项目
  /sub4
    ...Java 项目
  /sub5
    package.json
    ...Java脚本 React 项目

我目前在 sub2 和 sub5 项目中都设置了 Husky,这会导致冲突(每当我切换项目时都需要 npm install)。此外,Java 开发人员报告说,当他们在项目 sub1、sub3 和 sub4 中提交代码时,会执行 Husky git 挂钩。

如果提交时在某个文件夹中,是否可以只使用钩子运行?

Is it possible to only have the hooks run if you are IN a certain folder when you commit?

不,但是 挂钩本身 可以确定 它在 中的目录时 运行。这没有正确记录,但是 GIT_PREFIX 在 Git chdir-s 之前的环境中设置到 $GIT_WORK_TREE$GIT_DIR 目录。 (从 Git 版本 1.7.8 开始就是这种情况。)

我遇到了同样的问题。我通过在主目录中安装 husky 来修复它。
我的设置:

/project
    .git
    package.json
    /frontend
        package.json
    /frontend-admin
        package.json

/project/package.json中:

{
  "license": "MIT",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "frontend": "cd frontend && yarn lint"
    "frontend:admin": "cd frontend-admin && yarn lint",
  },
  "husky": {
    "hooks": {
      "pre-commit": "npm-run-all frontend frontend:admin"
    }
  },
  // In the main folder you should install husky 
  // and npm-run-all to execute multiple commands
  "dependencies": {
    "husky": "^4.3.0",
    "npm-run-all": "^4.1.5"
  }
}

您的子目录应该有一个要执行的 lint 脚本。
当其中一个脚本崩溃时,husky 会给出报告并立即中止。

我通过在 /root 目录中安装 运行 husky 解决了同样的问题。 (这是必需的,因为哈士奇需要与 .git 文件夹位于同一目录中。

npm install husky
npx husky install #use this command to create a .husky folder

搜索 'pre-commit' 文件

cd ./frontend && npm run lint && npm run build
cd ..
cd ./backend && npm run lint && npm run test

注意:输入相同的命令,以便您执行每个 sub-directory/project 谢谢!

虽然这个问题已经有几年了。希望有人能从 husky.

的人们提供的更新答案中受益

TL;DR

查看新指南here

对于那些 w@ntz answ3rz n0wz!!

typicode/husky-init README.md 中提供的新指南在“您的 package.json 文件和 .git 目录不在同一级别时提出以下建议。对于例如,project/.gitproject/front/package.json"

您可以在准备脚本期间更改目录并传递子目录:

// package.json
{
  "scripts": {
    "prepare": "cd .. && husky install front/.husky"
  }
}