Administrar sitios con Git

8

Estoy empezando a usar Git para administrar las compilaciones de sitios de Joomla, y estoy buscando una guía de mejores prácticas. Tal y como está:

  • Use WHM para aprovisionar una nueva cuenta. He escrito un enlace posterior a la instalación para descargar automáticamente Joomla desde Github y colocarlo en el public_htmldirectorio correspondiente , así como crear la base de datos y el usuario de la base de datos
  • Instale manualmente Joomla a través de la interfaz web (aunque actualmente también busca una forma de automatizar esto)
  • Configure un repositorio desnudo arriba public_html: aquí es donde los usuarios empujan y tiran. Llamaremos a estoorigin
  • Configurar un repositorio estándar en public_html
  • Agregar un Joomla específico .gitignore
  • Especifique el repositorio desnudo como nuestro control remoto ( git remote add origin ../repo.git)
  • Realice git add ., luego git commit -m"Initial J! Commit", git push origin masterpara obtener la instalación predeterminada en nuestro repositorio simple
  • Agregue un post-receivegancho al repositorio simple para extraer automáticamente los cambios en el repositorio public_html(ya que el repositorio básico es donde los desarrolladores empujarán los cambios locales)
  • Agregue un post-updategancho al repositorio en public_htmlcaso de que alguien realice cambios en el servidor ... aunque no deberían

No estoy demasiado preocupado por las bases de datos en este momento. Mi principal problema ahora es tratar con adiciones / cambios de archivos de Joomla. Obviamente, a medida que instalo plantillas y extensiones, se agregarán y eliminarán ciertos archivos. Del mismo modo, las actualizaciones de Joomla provocarán cambios.

¿Cuál es la mejor manera de lidiar con estos cambios en el servidor? Estaba pensando en escribir un pequeño plugin que se ejecuta onAfterRendero similar, que emplea para realizar PHPGit git add ., git commit git push origin master. Luego, en mi copia local, puedo hacer un tirón y todo sale bien. ¿O hay un mejor camino?

codinghands
fuente

Respuestas:

4

No entiendo por qué estableciste la estructura pública / desnuda;

Solo utilizo public_html como raíz del repositorio, con un .gitignore muy completo (que debe actualizarse después de cada nueva actualización de Joomla!, Con la git statusque encuentra los nuevos archivos y los agrega para que no se versionen).

Los desarrolladores empujan a las ramas de desarrollo; al final, cuando se aprueba un lanzamiento, se vuelve a crear en contra del maestro, se prueba y se empuja a la producción.

No uso ganchos, pero tengo un par de scripts que vuelcan las partes relevantes de la base de datos que deseo compartir, pero dejo que el usuario ejecute los scripts de importación si lo desea; de esta manera, si alguien está trabajando en una nueva extensión, mantendrá su configuración hasta que esté listo para compartir.

Si usa less / sass, es posible que desee ejecutar la compilación en los ganchos posteriores a la confirmación para asegurarse de que los indicadores de compresión estén siempre activados en el servidor.

- Actualización: .gitignore -

No puedo compartir mi .gitignore aquí, ya que está sujeto a cambios con cada Joomla! actualizar. En primer lugar, asegúrese de que su eclipse .project .settings, etc. y otros archivos que desea excluir estén en un .gitignore maestro junto con configuration.php y .htaccess. Mi maestro .gitignore se ve así para un sitio con componentes desagradables que escriben cambios en sus propias carpetas en lugar de caché y tmp; Además, utiliza sass:

*/.sass-cache
/components/com_sobipro/var/cache/*
/components/com_djclassifieds/images/*
/components/com_sobipro/tmp/*
/components/com_sobipro/var/*
/log
/._db.sql
/logs
/stats
/components/com_sobipro/tmp/edit/*
/.buildpath
/.project
/.settings
/.htaccess
/images/icons/*
/images/photos/*
/images/sobipro/*
/images/classifieds/*
/administrator/cache/*
/tmp/*
/configuration.php
/index.php
/joomla.xml
*.txt

así que empiezo copiándolo (desde la raíz web):

cp /home/_core/.gitignore .

Luego explote el paquete de actualización (el paquete de actualización completo) y ejecute

find | sed "s/^\.//"  >> /home/yoursitefolder/public_html/.gitignore

ADVERTENCIA: ¡no ejecute find en el sitio en vivo, solo en el paquete de actualización!

Ejecute un par de pruebas y vea con estado git lo que se agregará cada vez antes de finalizar el procedimiento y escriba scripts de bash para ello: esto es lo que estoy usando, pero no está garantizado que se ajuste a sus requisitos al 100%

Riccardo Zorn
fuente
Gracias por su respuesta, ¿estaría dispuesto a hacer público su .gitignore? Actualmente soy el único desarrollador y soy bastante nuevo en Git, así que seguí algunas pautas de flujo de trabajo de desarrollo web en línea para llegar a donde estoy, lo que lleva a la estructura pública / desnuda.
codinghands
No, no lo pegaré aquí; Acabo de agregar instrucciones para crearlo
Riccardo Zorn
Hola Riccardo: gracias, ya tengo una versión bastante completa .gitignore, solo quería ver las diferencias.
codinghands
Puede ignorar las carpetas a nivel mundial, por ejemplo: para ignorar las carpetas de caché en todas partes, simplemente agregue cache/a su .gitignore
jackJoe