Как запустить лайковую предварительную фиксацию только в дочернем каталоге
У нас есть корпоративное приложение со структурой папок, подобной следующей:
/ проект.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\""
}