2015-08-13 2 views
0

Мой крюк pre-commit сжимает/компилирует файлы css/js. Когда возникает ошибка, я просто использую echo для вывода ошибки, а затем exit 1. Тем не менее, текст, написанный на консоль, - WHITE, поэтому не легко увидеть, когда возникает ошибка.Git - ошибка фиксации ошибки перед фиксацией

Есть ли способ записи на консоль (errOut?), Который сделает текст RED?

+1

Добавьте свой сценарий предварительной фиксации к вашему вопросу. – Jubobs

+0

Все, что вам нужно, это крючок с тремя строками, который выглядит так: '#!/Usr/bin/sh [NEXTLINE]> & 2 echo" JS compression failed "[NEXTLINE] exit 1', где NEXTLINE - это новая строка – Redtopia

ответ

6

Лучший способ справиться с этим, чтобы раскрасить ваш выход крюк вместо PS1 запросить, например:

red='\033[0;31m' 
green='\033[0;32m' 
yellow='\033[0;33m' 
no_color='\033[0m' 

echo -e "\n${yellow}Executing pre-commit hook${no_color}\n" 

... do your hook stuff ... 

if [[ something bad happens ]]; then 
    >&2 echo -e "\n${red}ERROR - Something BAD happened!\n${no_color}" 
    exit 1 
fi 

echo -e "${green}Git hook was SUCCESSFUL!${no_color}\n" 

Примечание: требуется использовать -e с echo - он предназначен для интерпретации специальных символов, таких как цвета и новые строки. (http://ss64.com/bash/echo.html)

+0

Удивительно, спасибо! – zaratustra

1

Это может быть хорошей идеей, чтобы настроить вас колотить, как это:

0 ;) $ cat ~/.bashrc 
PS1="\[\033[01;37m\]\$? \$(if [[ \$? == 0 ]]; then echo \"\[\033[01;32m\];)\"; else echo \"\[\033[01;31m\];(\"; fi) $(if [[ ${EUID} == 0 ]]; then echo 
'\[\033[01;31m\]\h'; else echo '\[\033[01;32m\]\[email protected]\h'; fi)\[\033[01;34m\] \w \$\[\033[00m\] " 

Он отображает зеленый счастливое лицо;), если последняя команда закончена без ошибок, а красный грустное лицо; (если это не удалось, например:.

0 ;) $ cat 1.sh 
#!/bin/bash 
exit 1 
0 ;) $ ./1.sh 
1 ;($ 
0 ;($ cat 1.sh 
#!/bin/bash 
exit 0 
0 ;) $ ./1.sh 
0 ;) $ 

вы можете настроить вывод, однако вы хотите

пример был взят из here

В действии: enter image description here

Update

Для Git 2.5 для окон должно быть

if ! \$?; then 
    PS1="\[\e[1;32m\]Nice Work!\n\[\e[0;32m\]\[email protected]\h \[\e[0;33m\]\w\[\e[0;37m\]\n\$ " 
else 
    PS1="\[\e[1;31m\]Something is wrong!\n\[\e[0;32m\]\[email protected]\h \[\e[0;33m\]\w\[\e[0;37m\]\n\$ " 
fi 
+0

Спасибо @zaratustra - Я пытаюсь понять ваш пример. Можете ли вы изменить и добавить объяснение того, что делают команды? Я довольно ограничен в своих сценариях оболочки. Я понятия не имею, что такое '0;) $ cat 1.sh'. – Redtopia

+0

Команда 'cat' печатает на экране содержимое файла. В этом случае файл '1.sh' является сценарием bash, который выходит с ошибкой (' exit 1') в первом случае, и после его редактирования скрипт завершается успешно ('exit 0') – zaratustra

+0

Могу ли я сделать это, не создавая новых sh файлов сценариев? Может быть, все, что мне нужно сделать, это написать stderr? Я предполагаю, что эхо-запись в stdout ... как я буду писать в stderr? – Redtopia

Смежные вопросы