Если вы уже используете Git Hooks, такие как «pre-commit», вы можете добавить еще один скрипт в список «pre-commit» и написать скрипт, который делает то, что вам нужно (код ниже).
Используя комбинацию команд git / grep, вы можете проверить, что в списке промежуточных файлов «package.json» и «package-lock.json» есть (или ни одна из них не существует).
Сценарий может быть:
#!/bin/sh
if [ `git diff --name-only --cached | egrep -c 'package.json|package.lock.json'` == "0" -o `git diff --name-only --cached | egrep -c 'package.json|package.lock.json'` == "2" ]; then
echo "Checked successfully."
elif [ `git diff --name-only --cached | egrep -c 'package.json'` == "1" -a `git diff --name-only --cached | egrep -c 'package.lock.json'` == "0" ]; then
echo "Warning: you are committing package.json without package.lock.json"
else
echo "Error: make sure you commit BOTH package.json and package.lock.json"
exit 1
fi
exit 0
git diff --name-only --cached
получает список промежуточных файлов (только имена файлов)
|
использовать результат предыдущей команды в качестве аргументадля следующего
egrep
для поиска (в этом случае ищите строки 'package.json' и 'package.lock.json')
-c
подсчитывает количествоmatch
Завершение всей команды в кавычки выполнит ее и предоставит результат в основной скрипт
Результат команды git + egrep возвращает количество найденных вхождений.Затем вы проверяете, что это за результат, чтобы скрипт продолжал (exit 0
) или выходил (exit 1
).
Сделайте исполняемый файл скрипта и добавьте ссылку на него в свой package.json:
"scripts": {
"check-package": "./bin/check-package.sh",
}
...
"pre-commit": [
"check-package"
]
Так и должно быть!
Когда вы закончите, убедитесь, что вы сначала зафиксировали только сценарий, а затем package.json (иначе он уже будет искать сценарий)., не находя его).
Последнее примечание: этот подход действителен для проверки любых 2 или более файлов, которые должны быть одновременно в списке файлов, подготовленных для фиксации.