Может ли git pre-push hook предупредить меня, если исходный код моей текущей ветки содержит строку? - PullRequest
0 голосов
/ 16 января 2019

Я часто забываю удалить код отладки (например, console.log() из моих ветвей git, прежде чем они будут просмотрены. Я в порядке с отправкой вызовов console.log(), до тех пор, пока Я не забываю удалить их перед тем, как сдвинуть и объединить ветвь.

Мне интересно, как написать ловушку перед нажатием, которая проверит, сохраняются ли какие-либо вызовы console.log() в моей текущей ветке. Я не хочу, чтобы хук блокировал меня от слияния, а скорее напомнил мне удалить эти строки кода. Может ли крюк предварительного толчка сделать это?

1 Ответ

0 голосов
/ 16 января 2019

Я получил pre-push работающий хук (установлен в .git/hooks/pre-push и запустил chmod +x на нем):

(Пожалуйста, рассмотрите это Public Domain, через CC0 посвящение .)


echo "Running pre-push hook..."

# Grep below should match the following cases from git diff:
    # +++ testserver.js
    # +console.log(djsdlkjd)
    # + ... console.log(djsdlkjd)
# For an explanation of the regex, see
# https://regex101.com/r/92ysUf/1
searchOutput=$(git --no-pager diff -G"console.log" master...HEAD | perl -ne'print if m{^(\+{1}|\+{3})(?!\+)( |.*?\bconsole.log)}')

# If $searchOutput is blank, wc -l will show it as having 1 line.
# Thus, we will check below whether it has >1 line, and, if so,
# print it and a warning.
if [ $(echo "$searchOutput" | wc -l) -gt 1 ]
then
    echo "\n----------------\n"
    echo "WARNING: The branch you are pushing contains at least one added console.log(). Here is the abbreviated git diff output:\n"
    echo "$searchOutput"
    echo "\nContinuing with the push; you may want to remove the lines above in a future commit, though."
    echo "\n----------------\n"
fi

exit

Теперь это будет напоминать мне каждый раз, когда я нажимаю, если (и где) в текущей ветке остаются console.log вызовы.

Я публикую этот ответ, потому что он может помочь будущим читателям не только понять, как это сделать, но и как искать исходный код текущей ветки git.

...