Подход Unix здесь.
Вам не нужна поддержка git
чтобы получить простое предупреждение. Вы можете написать скрипт-оболочку или функцию оболочки, которая будет проверять параметры командной строки и предпринимать соответствующие действия.
Эта функция должна работать в bash
(возможно, добавьте ее в ваш .bashrc
) или даже в обычном sh
.
git() {
local found
found=0
for option; do
if [ "$option" = "-a" ]; then found=1; break; fi
done
if [ "$found" -eq 1 ]
then
read -p "Option \`-a' detected. Please confirm with capital Y:" -r key
[ "$key" != "Y" ] && return 254
fi
command git "$@"
}
В качестве альтернативы скрипт вместо функции:
#!/bin/sh
found=0
for option; do
if [ "$option" = "-a" ]; then found=1; break; fi
done
if [ "$found" -eq 1 ]
then
read -p "Option \`-a' detected. Please confirm with capital Y:" -r key
[ "$key" != "Y" ] && return 254
fi
exec "/full/path/to/git" "$@"
Назовите скрипт git
, сделайте его исполняемым и поместите его в каталог, который находится в вашем $PATH
перед каталогом с настоящим git
. $HOME/bin
может быть правильным местом; Мой Debian даже предоставляет .profile
(через /etc/skel/.profile
), который автоматически добавляет этот путь в PATH
(если каталог существует). Просто помните, что любой инструмент (например, скрипт), который использует $PATH
для вызова git
теперь будет вызывать ваш скрипт-обертку. Вы можете не хотеть этого. Если это так, используйте подход функции оболочки.
Вся процедура является доказательством концепции, она может быть неоптимальной. Это еще не заботится о вашем условии «если (и только если) некоторые изменения уже поставлены». Я не знаком с git
но я считаю, что этот ответ дает возможность проверить это:
git diff --cached
Используйте его, чтобы расширить логику вашей функции или сценария. Имейте в виду, что вам нужно /full/path/to/git
чтобы ваш скрипт не вызывал себя и не застревал в цикле (например, вилочная бомба без разветвления, цепная бомба). Функция должна использовать /full/path/to/git
или command git
по той же причине.
Также вы можете заменить [ "$option" = "-a" ]
на что-то вроде
[[ "$option" =~ ^-[a-zA-Z0-9]*a[a-zA-Z0-9]* ]]
чтобы охватить случаи , когда дается с другими коммутаторами в компактной форме (например , a
Команда -Pa
не является переносимой, хотя.