Альтернативой хукам предварительной фиксации, если вы используете Linux (или Git bash, или Cygwin или аналогичный), является включение git
в вспомогательную функцию оболочки. Добавьте приведенный ниже файл ~/.bashrc
(для bash, Git bash) или ~/.zshrc
(для zsh) или любой другой эквивалент для вашей оболочки:
real_git=$(which git)
function git {
if [[ ($1 == svn) && ($2 == dcommit) ]]
then
curr_branch=$($real_git branch | sed -n 's/\* //p')
if [[ ($curr_branch != master) && ($curr_branch != '(no branch)') ]]
then
echo "Committing from $curr_branch; are you sure? [y/N]"
read resp
if [[ ($resp != y) && ($resp != Y) ]]
then
return 2
fi
fi
fi
$real_git "$@"
}
(я проверял это с помощью bash и zsh в Red Hat и bash на Cygwin)
Каждый раз, когда вы вызываете git
, вы теперь будете вызывать эту функцию, а не обычный двоичный файл. Функция будет запускать git в обычном режиме, если только вы не вызываете git svn dcommit
, когда присоединены к ветке, которая не является основной. В этом случае вам будет предложено подтвердить перед выполнением фиксации. Вы можете переопределить функцию, указав путь к git
в явном виде (это то, что делает $real_git
).
Помните, что после обновления ~/.bashrc
или аналогичного вам потребуется перезагрузить его, либо запустив новый сеанс оболочки (выход и выход снова), либо запустив source ~/.bashrc
.
Редактировать : В качестве усовершенствования вы можете удалить первую строку, начиная с real_git=
, и заменить другие экземпляры $real_git
на command git
, что позволяет добиться того же, но в предпочтительном варианте. путь. Я не обновлял сам скрипт, так как не смог проверить изменения на zsh.