Estoy usando Git para administrar el código fuente y la implementación de mi sitio web, y actualmente tengo los sitios de prueba y en vivo en la misma casilla. A raíz de este recurso http://toroid.org/ams/git-website-howto originalmente, se me ocurrió la siguiente secuencia de comandos posterior a recibir el gancho para diferenciar entre empuja a mi sitio vivo y empuja a mi sitio de prueba:Git para sitios web/post-recepción/separación de sitios de prueba y producción
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"
Sin embargo, no tengo dudas de que esto es realmente segura:) De ninguna manera soy un experto en Git, pero supongo que Git probablemente realiza un seguimiento de la rama actual de la ramificación, y este enfoque probablemente tiene el potencial de confundirlo sin fin.
Así que un par de preguntas:
Es esto seguro?
¿Sería mejor tener mi repositorio base como el repositorio del sitio de prueba (con el directorio de trabajo correspondiente) y luego hacer que el repositorio cambie a un nuevo repositorio de sitios en vivo, que tenga un directorio de trabajo correspondiente al vivo base del sitio? Esto también me permitiría mover la producción a un servidor diferente y mantener intacta la cadena de implementación.
¿Hay algo que me falta? ¿Existe una forma diferente y clara de diferenciar entre implementaciones de prueba y producción cuando se usa Git para administrar sitios web?
Como una nota adicional a la luz de la respuesta de Vi, ¿hay una buena manera de hacer esto que se ocuparía de deleciones sin ensuciar con el sistema de archivos tanto?
Gracias, -Walt
PS - El guión que se le ocurrió para los múltiples repositorios (y estoy usando menos que oír mejor) es el siguiente:
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"
Y entonces el repositorio en ../Live/$sitename (estos son repos "desnudos" con árboles de trabajo añadió después de init) tiene la básica después de la recepción:
git checkout -f
if [ $? -eq 0 ]; then
echo "Live site `basename \`pwd\`` checked out successfully"
else
echo "Live site failed to checkout"
fi
Por el momento que fui con el n. ° 2, parece bastante limpio hasta ahora, siempre que recuerde volver a la rama maestra en el repositorio de prueba después de ingresar al sitio en vivo. –