Как я могу использовать лайки для проверки формата сообщения git commit?

Я пытаюсь применить политику сообщений git commit, чтобы мои репозитории были чистыми и аккуратными. Я видел официальные документы о серверных и клиентских хуках, а затем натолкнулся на хаски.

До сих пор я мог работать с первым, но не мог настроить хаски, у меня еще есть чему поучиться. Основная идея заключается в том, чтобы иметь возможность работать на новой рабочей станции без необходимости вручную устанавливать какие-либо клиентские хуки.

Может кто-нибудь объяснить, как я могу настроить лайки для проверки моих сообщений коммитов или даже сделать пример?

Это мой коммит-зацепка project-root/githooks папка:

#!/usr/bin/env ruby

message_file = ARGV[0]
message = File.read(message_file)

$regex = /([resolved|fixed]) #([0-9])* ([A-Z])\w+/

if !$regex.match(message)  
  puts "[POLICY] Your message is not formatted correctly!"  
  puts "Message format must be like:"  
  puts "resolved #123 Case title (for features)"  
  puts "fixed #123 Case title    (for bugs)"  
  puts "First letter of 'Case title' must be capitalized!"  
  exit 1  
end  

Я пытался добавить скрипт в package.json:

"scripts": {  
  ... : ...,  
  "commitmsg": "sh hooks/commit-msg",  
  ... : ...  
}  

Крюк не работает. Все сообщения проходят. Если положить в.git / hooks, он работает нормально.

Утилита package.json и commit-msg в тестовом проекте

Вот снимок экрана тестового проекта с package.json, ловушкой commit-msg и ошибкой, которую он выдает.

Тот же хук, вставленный в папку.git / hooks, работает просто отлично.

4 ответа

Решение

Смотрите выпуск 81

Сначала проверь

npm config get ignore-scripts # should be false

Затем в git-репо:

npm install husky --save-dev

Затем вы можете добавить хуки (здесь pre-commit и pre-push) к npm (package.json) идея заключается в том, что эти определения хуков являются версиями package.json файл (часть ваших источников git-репо)

https://camo.githubusercontent.com/89b1f62d0f2f8b73cad2c70faec7b45d9957c41f/68747470733a2f2f692e696d6775722e636f6d2f794844734d32522e706e67

Вы также можете объявить существующие регулярные зацепки ( выпуск 92)

{
  "scripts": {
    "precommit": "sh scripts/my-specific-hook.sh"
  }
}

Вы можете использовать validate-commit-msg чтобы подтвердить ваше сообщение о коммите.

добавлять "commitmsg": "validate-commit-msg" на ваши сценарии npm в package.json,

С Husky 7+ вы можете добавить следующее в .husky/commit-msgфайл:

      #!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

message="$(cat $1)"
requiredPattern="^(add|cut|fix|bump|make|start|stop|refactor|reformat|optimise|document|merge) .*$"
if ! [[ $message =~ $requiredPattern ]];
then
  echo "-"
  echo "-"
  echo "-"
  echo " Wrong commit message! "
  echo "The commit message must have this format:"
  echo "<verb in imperative mood> <what was done>"
  echo "Allowed verbs in imperative mood: add, cut, fix, bump, make, start, stop, refactor, reformat, optimise, document, merge"
  echo "Example: add login button"
  echo "-"
  echo "Your commit message was:"
  echo $message
  echo "-"
  echo "For more information, check script in .husky/commit-msg"
  echo "-"
  exit 1
fi

Как это:

Во-первых, добавьте сценарий проверки в ваш конский конфиг:

// package.json
{
 ...
 "husky": {
  "hooks": {
     "pre-commit": "npm test",
     // if you use validate-commit-msg, this can be "validate-commit-msg"
+    "commit-msg": "sh scripts/my-specific-hook.sh",
     ....
  }
 }
}

А потом, попробуйте...

Кажется, все в порядке.

Это для commitlintинтеграция согласно документации :

      # Add hook
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'
# or
yarn husky add .husky/commit-msg 'yarn commitlint --edit $1'

Скорее всего; вы можете легко настроить его примерно так:

      yarn husky add .husky/commit-msg 'sh scripts/my-specific-hook.sh $1'
Другие вопросы по тегам