Как запустить лайковую предварительную фиксацию только в дочернем каталоге

У нас есть корпоративное приложение со структурой папок, подобной следующей:

/ проект.git
  /sub1
    ... проект Java
  /sub2
    package.json
    ...Javascript Магистральный проект
  /sub3
    ... проект Java
  /sub4
    ... проект Java
  /sub5
    package.json
    ... Проект Javascript React

В настоящее время Husky настроен как в проектах sub2, так и в sub5, что вызывает конфликты (требуется установка npm при каждом переключении проектов). Кроме того, разработчики Java сообщают, что когда они фиксируют код в проектах sub1, sub3 и sub4, выполняются хуки Husky git.

Можно ли запускать ловушки только в том случае, если вы ВХОДИТЕ в определенную папку при фиксации?

5 ответов

Решение

Можно ли запускать ловушки только в том случае, если вы ВХОДИТЕ в определенную папку при фиксации?

Нет, но ловушка сама может определить, в каком каталоге она находилась при запуске. Это не правильно задокументировано, но GIT_PREFIX устанавливается в среде до Git chdir-с к $GIT_WORK_TREE или же $GIT_DIR каталог. (Так было с Git версии 1.7.8.)

Пока этому вопросу несколько лет. Надеюсь, кому-то будет полезен обновленный ответ, предоставленный людьми из хаски.

TL;DR

См. новое руководство здесь.

Для тех, кто w@ntz отвечает n0wz nsw3rz!!

Новое руководство, представленное в файле typicode/husky-init README.md , предлагает следующее, когда « ваш package.jsonфайл и каталог .git не находятся на одном уровне. Например, project/.gitа также project/front/package.json"

Вы можете изменить каталог во время подготовки скрипта и передать подкаталог:

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

Я столкнулся с той же проблемой. Исправил, установив хаски в основной каталог.
моя установка:

/ проект.git
    package.json
    /внешний интерфейс
        package.json
    / интерфейс-админ
        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 для выполнения.
Когда один из скриптов вылетает из строя, хаски сообщит об этом и немедленно прекратит работу.

У меня была та же проблема, которую я решил путем установки и запуска хаски в корневом каталоге.(Это необходимо, поскольку хаски должен находиться в том же каталоге, что и папка .git.

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

Найдите файл "до фиксации"

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

Примечание. Введите одни и те же команды для выполнения каждого подкаталога / проекта. Спасибо!

Эти проекты обычно поставляются вместе с инструментами монорепозитория. В моем случае с lerna простой конфиг может сделать то, что вам нужно:

      /root_workspace
    .git
    lerna.json
    package.json
    /sub-project-1
        package.json
    /sub-project-2
        package.json
  • ~/root_workspace/.husky/precommit: используйте правильную команду lerna для вашего проекта.
      #!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

# run script in a certain project
lerna exec npm run project_1_script --scope sub-project-1

# run script (one by one) in changed projects
lerna exec --concurrency 1 npm run some_script --since HEAD

# run script (one by one) in all projects
lerna exec --concurrency 1 npm run another_script
  • ~/root_workspace/sub-project-1/package.json
      // ...
"scripts": {
    "project_1_script": "echo \"project 1 script\"",
    "some_script": "echo \"script is triggered by changed project\"",
    "another_script": "echo \"script is triggered by all projects\""
}
Другие вопросы по тегам