В процессе разработки каждый разработчик пишет то, что он не собирается фиксировать и отправлять на удаленный сервер, например отладочные распечатки. Это случается со всеми нами время от времени: мы забываем удалить этот временный материал перед фиксацией…
Я решил эту несколько неловкую ситуацию, используя простой подход: к каждой строке, которую я не хочу случайно зафиксировать, я добавляю последовательность магических символов ххх. Эта последовательность может быть в любой части строки: внутри комментария, как имя переменной, как имя функции, вы называете ее. Несколько примеров использования:
- Отладочная печать:
print 'xxx reached this line'
. - Переменная, используемая для отладки:
xxxCounter = 0
. - Временная функция:
def xxxPrintDebugInfo():
. - TODO, которое необходимо выполнить перед совершением:
# TODO: don't forget to refactor this function xxx
.
Я реализовал это с помощью git hooks, который представляет собой механизм git для запуска пользовательских скриптов при выполнении определенных важных действий. Я использовал хук pre-commit для проверки содержимого коммита.
Просто создайте файл с именем .git/hooks/pre-commit
со следующим содержанием:
#!/bin/sh
marks=xxx,aaa,asd
marksRegex=`echo "($marks)" | sed -r 's/,/|/g'`
marksMessage=`echo "$marks" | sed -r 's/,/ or /g'`
if git diff --staged | egrep -q "^\+.*$marksRegex"; then
echo "You forgot to remove a line containing $marksMessage. You can forecully commit using \"commit -n\""
exit 1
fi
marks
содержит последовательности символов, которые не могут быть зафиксированы.git diff --staged
показывает изменения, которые будут зафиксированы. Изменения проходят через регулярное выражение, которое ищет любую запрещенную метку (используяegrep
).- Если обнаружена запрещенная метка, скрипт завершает работу с кодом ошибки, что приводит к сбою фиксации.
Если вы хотите обойти ловушку (например, вы хотите зафиксировать двоичный файл, такой как изображение, которое может содержать запрещенную метку), вы можете commit -n
.