1

Каждый раз, когда пользователь вводит git commit -a ,
Я хочу запустить его в своем собственном сценарии,
Затем запустите оригинальную команду git commit.. и запустите ее так, как обычно.

4 ответа4

5

Вы можете использовать «.git/hooks» для установки хука «pre-commit», например:http://git-scm.com/book/en/Customizing-Git-Git-Hooks

Это обычно, как вы бы это сделали. Конечно, было бы полезно, если бы вы точно объяснили, ЧТО вы хотите сделать "перегрузкой".

2

Если вы хотите, чтобы ваш "крючок" не ограничивался только 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/

0

Если вы создадите скрипт 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 и кто может писать в эти каталоги.

0

Вы можете определить функцию оболочки, которая вызывает пользовательский скрипт, который затем передает исходную команду 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .