Если Вы обратитесь к дочернему классу как к типу его родителя, то невиртуальная функция назовет версию родительского класса.
т.е.:
Parent* obj = new Child();
Этот тип ловушки не поддерживается Git. Это выходит за рамки уважительных причин для перехвата Git как предоставлено сопровождающим Git.
Вступительное замечание в приведенном выше сообщении почти напрямую относится к вашему случаю:
Мне не особенно нравятся хуки, которые действовать после начала операции локально и действовать исключительно на основе локальных данных. Это может быть потому, что я все еще считаю строительные блоки инструментов git, подходящие для сценарии более высокого уровня больше, чем другие люди делают.
Дополнительный pushurl
к локальному репо с хранилищем «альтернативных» объектов может дать вам способ с низкими накладными расходами локально выполнить push hook. Но на самом деле усилия гораздо больше, чем git push upstream && update-web-server
(возможно, в псевдониме оболочки, псевдониме git или скрипте).
Недавно я столкнулся с той же проблемой. Мне нужен был хук, чтобы push из моего подмодуля git фиксировал ссылку на новый подмодуль в "суперпроекте".
Как упомянул Крис, лучший способ - это использовать псевдоним git, например, такой:
$ git config alias.xpush '!git push $1 $2 && update-server.sh'
# (remember the backslash before the ! if your shell requires it)
Это добавляет следующее в ваш файл .git/config:
[alias]
xpush = !git push $1 $2 && update-server.sh
И теперь, если вы напечатаете:
$ git xpush
ваши изменения будут вытолкнуты, а затем будет выполнен update-server.sh.