Как отключить git push, когда в коде есть TODO?

У нас возникла проблема в нашей команде, и мы решили проверить, есть ли способ или команда git, чтобы отклонить git push, если в коде есть TODO. Любые идеи? Заранее спасибо.


person hosseio    schedule 14.12.2012    source источник


Ответы (2)


Невозможно использовать хуки предварительного получения в github, поэтому вместо этого мы используем хук предварительной фиксации на стороне клиента: http://git-scm.com/book/en/Customizing-Git-Git-Hooks#Client-Side-Hooks

Наш сценарий предварительной фиксации (на основе http://mark-story.com/posts/view/using-git-commit-hooks-to-prevent-stupid-mistakes) выглядит так:

#!/bin/sh

for FILE in `git diff-index -p -M --name-status HEAD -- | cut -c3-` ; do
    if [ "grep 'TODO' $FILE" ]
    then
        echo $FILE ' contains TODO'
        exit 1
    fi
done
exit

У нас есть этот скрипт в нашей системе управления версиями, и мы создаем символическую ссылку на него в .git/hooks.

Спасибо за помощь :)

РЕДАКТИРОВАТЬ: из-за поведения grep в операторе if нам нужно было отредактировать наш скрипт:

#!/bin/sh

for FILE in `git diff --name-only --cached`; do
    grep 'TODO' $FILE 2>&1 >/dev/null
    if [ $? -eq 0 ]; then
        echo $FILE ' contains TODO'
        exit 1
    fi
done
exit
person hosseio    schedule 17.12.2012
comment
Не забудьте chmod +x .git/hooks/pre-commit после создания файла - person dutzi; 18.12.2015

Предварительно получите хук на сервере, загрузите файлы и прервите отправку :)

Дополнительную информацию о хуке предварительного получения можно найти здесь: http://git-scm.com/book/en/Customizing-Git-Git-Hooks#Server-Side-Hooks

person Christopher Valles    schedule 14.12.2012
comment
Любые идеи или ссылки, где можно прочитать об этой работе в github? Наш проект размещен на github, и я вижу только хук post-receive :? Конечно, мы можем использовать хуки на стороне клиента (например, хук перед фиксацией), но тогда нам нужно создать его на всех наших машинах. Спасибо за вашу помощь :) - person hosseio; 14.12.2012