Каждый раз, когда пользователь вводит git commit -a
,
Я хочу запустить его в своем собственном сценарии,
Затем запустите оригинальную команду git commit..
и запустите ее так, как обычно.
4 ответа
Вы можете использовать «.git/hooks» для установки хука «pre-commit», например:http://git-scm.com/book/en/Customizing-Git-Git-Hooks
Это обычно, как вы бы это сделали. Конечно, было бы полезно, если бы вы точно объяснили, ЧТО вы хотите сделать "перегрузкой".
Если вы хотите, чтобы ваш "крючок" не ограничивался только git
но вам нужно, чтобы он работал с любым исполняемым файлом, вы можете использовать alias
alias git='myhackyscript.sh'
тогда myhackyscript.sh
может выглядеть так
#!/bin/bash
# save params
params=("$@")
# do what i want to do
do_something
# launch git
git "${params[@]}"
myhackyscript.sh
должен храниться в папке $PATH
например /usr/bin/
Если вы создадите скрипт ls
в таком месте, как ~/bin
который находится по path
до /bin/ls
ваш скрипт будет выполнен вместо этого.
user@wopr /home/user/bin/: $ cat ls
#!/bin/bash
echo "Security Breached!"
# Run original command
/bin/ls "$@"
Теперь при перечислении файлов появляется сообщение Security Breached!
всегда отображается.
user@wopr /home/user/bin/: $ ls
Security Breached!
ls file.sh file myscript.sh
user@wopr /home/user/bin/: $ which ls
/home/user/bin/ls
Вы должны знать о каталогах на вашем path
и кто может писать в эти каталоги.
Вы можете определить функцию оболочки, которая вызывает пользовательский скрипт, который затем передает исходную команду git:
git() {
case $1 in
commit)
echo "WUFF"
;;
esac
\git "$@"
}
Помещение этой функции в один из RC-файлов вашей оболочки (например, ~/.profile
или /etc/profile
в случае оболочек sh/bash/ksh) сделает ее доступной после следующего входа в систему. Конечно, вы можете получить гораздо более сложные, чем это. Также вы можете взглянуть на man-страницы git-sh-setup(1)
и git-rev-parse(1)
, в частности, раздел о parseopt
.