Я использую Git для управления исходным кодом и развертыванием моего сайта, и в настоящее время у меня есть тестовые и живые сайты, работающие в одном и том же поле. После этого ресурса http://toroid.org/ams/git-website-howto первоначально, я придумал следующий сценарий после приема крючка дифференцироваться между выталкивает на мой живой сайт и нажимает на мой тестовый сайт:Git для веб-сайтов/пост-прием/разделение тестовых и производственных сайтов
while read ref
do
#echo "Ref updated:"
#echo $ref -- would print something like example at top of file
result=`echo $ref | gawk -F' ' '{ print $3 }'`
if [ $result != "" ]; then
echo "Branch found: "
echo $result
case $result in
refs/heads/master)
git --work-tree=c:/temp/BLAH checkout -f master
echo "Updated master"
;;
refs/heads/testbranch)
git --work-tree=c:/temp/BLAH2 checkout -f testbranch
echo "Updated testbranch"
;;
*)
echo "No update known for $result"
;;
esac
fi
done
echo "Post-receive updates complete"
Однако, у меня есть сомнения, что это на самом деле безопасно:) Я ни в коем случае не специалист Git, но я предполагаю, что Git, вероятно, отслеживает текущий проверенный филиал, и этот подход, вероятно, может смутить его до конца.
Так несколько вопросов:
Это безопасно?
Будет ли лучший подход состоять в том, чтобы мой базовый репозиторий был хранилищем тестового сайта (с соответствующим рабочим каталогом), а затем изменил этот репозиторий на новый репозиторий реального сайта, который имеет соответствующий рабочий каталог для живого база сайта? Это также позволит мне перенести производство на другой сервер и сохранить целостность цепочки развертывания.
Есть ли что-то, что мне не хватает? Есть ли другой, чистый способ разграничения между тестовыми и производственными развертываниями при использовании Git для управления веб-сайтами?
В качестве дополнительной записки в свете ответа Vi, является ли хороший способом сделать это, что будет обрабатывать делеции без отвода с файловой системой много?
Спасибо, -Walt
PS - Сценарий я придумал для нескольких сделок РЕПО (и я использую, если я не лучше слышать) выглядит следующим образом:
sitename=`basename \`pwd\``
while read ref
do
#echo "Ref updated:"
#echo $ref -- would print something like example at top of file
result=`echo $ref | gawk -F' ' '{ print $3 }'`
if [ $result != "" ]; then
echo "Branch found: "
echo $result
case $result in
refs/heads/master)
git checkout -q -f master
if [ $? -eq 0 ]; then
echo "Test Site checked out properly"
else
echo "Failed to checkout test site!"
fi
;;
refs/heads/live-site)
git push -q ../Live/$sitename live-site:master
if [ $? -eq 0 ]; then
echo "Live Site received updates properly"
else
echo "Failed to push updates to Live Site"
fi
;;
*)
echo "No update known for $result"
;;
esac
fi
done
echo "Post-receive updates complete"
А потом репо в ../Live/$sitename (это «голые» сделки РЕПО с рабочими деревьями добавлены после инициализации) имеет базовый после приема:
git checkout -f
if [ $? -eq 0 ]; then
echo "Live site `basename \`pwd\`` checked out successfully"
else
echo "Live site failed to checkout"
fi
На данный момент я ходил с № 2, пока это кажется довольно чистым до тех пор, пока я не помню, чтобы переключиться обратно на главную ветку в тестовом хранилище после нажатия на живое место. –