Основываясь на идее Иракли, вот что я работаю в качестве пост-получения в моем репо ...
#!/bin/bash
MESSAGE=$(git log -1 HEAD --pretty=format:%s)
if [[ "$MESSAGE" == *\[staging\]* ]];
then
#action / update staging
# another method not being used...
# GIT_WORK_TREE=/path/to/working/site/ git checkout -q -f staging
echo "NOTE: Beginning Auto-Push to Staging Server... "
`git push staging`
echo "========================================================
======== Done! Pushed to STAGING.com =============
======== Thanks Captain. Keep up the good work! ========
========================================================"
elif [[ "$MESSAGE" == *\[production\]* ]];
then
#action / update production
echo "NOTE: Beginning Auto-Push to Production Server... "
# `git push production`
echo "========================================================
======== Done!!! Pushed to Production.com =======
======== Test immediately for any errors! =========
========================================================"
fi
Примечание:
, чтобы заставить 'git push staging' работать, вам нужно иметь хук .git / hooks / post -iveive на этом рабочем дереве. Я использовал этот код , за исключением того, что добавил внизу 'umask 002 && git reset --hard'.
Я также должен был добавить запрещение в файл .git / config этого рабочего дерева:
[receive]
denycurrentbranch = ignore
Примечание 2:
Обратите внимание, что эта настройка не для всех ... только для небольших (ish) сайтов, где быстрые и грязные обновления подходят.