В общем хочу куда-то положить свои .настройки(они же конфиги), чтобы потом отовсюду скачать можно было, но заела паранойя — а вдруг закоммичу какой-нибудь пароль случайно.
Идея возникла такая — в корне репозитория лежит зашифрованный файл с регекспами(.pass_rx_file.gpg, этот файл понятное дело в .gitignore и никуда не льётся), которыми должны проверяться все коммиты во все ветки, кроме ветки local-security.
Так же должны проверяться все коммиты со всех веток перед push'ем.
Пока что сделал так:
gpg -o - .pass_rx_file.gpg:
.*?test.*?120.*?password?.*
.*?10crack[[:digit:]]*?me.*
cat .git/hooks/commit-msg
#!/bin/bash
pass_rx_file=".pass_rx_file.gpg"
message_file="$1"
exec 1>&2
if gpg -o - "$pass_rx_file"|grep -E -f - "$message_file" > /dev/null; then
echo "[ERROR] Your commit message contain a sensible information!"
exit 1
fi
exit $?
cat .git/hooks/pre-commit
pass_rx_file=".pass_rx_file.gpg"
exec 1>&2
file_names=`git diff --cached --name-only | sed -e 's/^\|$/'"'"'/g'`
results=`echo "$pass_rx_file" "$file_names"|xargs sh -c 'gpg -o - "$0"|grep -E -f - "${@:1}"'`
if [ -n "$results" ]; then
echo "Error: Attempt to add files containing a sensible information:
$results"
exit 1
fi
exec git diff-index --check --cached $against --
Можно ли сделать красивее всю эту ерунду с gitом, sedом, xargsом, sh, gpg, grepом ?)
Как тут лучше всего проверить ветку, в которую осуществляется коммит?
Кроме того текущая реализация будет проверять файлы целиком, а лучше бы оно проверяло только дифы. Как это всё слепить в кучу?
Тест:
mkdir test_hooks
cd test_hooks
git init
cp pre-commit commit-msg .git/hooks/
echo '.*?test.*?120.*?password?.*
.*?10crack[[:digit:]]*?me.*' > pass_rx_file
gpg -c pass_rx_file
mkdir testdir
echo 'sad fdf test1120-w3password)' > testdir/fi\ le
echo test >> testf
git add testf testdir/fi\ le
git commit -a -m 'message 10crack4me of no interest'
К pre-push хуку пока не знаю как и подступиться.
Ну и подскажите баги, подводные ками(да, gpg можно поменять на gpg2, чтобы постоянно не вводить пароли), делитесь своими полезными хуками). Может кто уже делал такое?