Flujo de trabajo del servidor de producción / ensayo de Git

108

Actualmente mi sitio web (servidor de producción) ya tiene una gran cantidad de código. Y ahora quiero comenzar a usar Git para mis proyectos y configurar un servidor de prueba para mi equipo. ¿Alguien puede darme algún consejo?

Aquí está la imagen en mi mente:

        Production        - Production server which already have codes
            ↑             
         Staging          - New staging server, will install Trac too
         ↗↙ ↖↘          
  Developer1  Developer2  - Local development 

Mi pregunta es, ¿cómo debo empezar?

Aquí hay algunos pasos en mi mente:

  1. hacer un git initservidor en producción (¿es seguro?)
  2. clone el repositorio de producción al servidor de ensayo
  3. los desarrolladores cloneel repositorio desde la puesta en escena hasta su máquina local
  4. push archivos al servidor de ensayo después de terminar de cambiar
  5. cuando la puesta en escena está lista, pushtodo para la producción

¿Tiene sentido este flujo de trabajo o hay alguna forma mejor de hacerlo?

¿Qué pasa si solo quiero cambiar un archivo?

¿El origen / maestro tiene algo que ver con esto en este proceso? ¿Quién es el origen? voy a terminar teniendo múltiples orígenes ??

Además, ¿cuándo debería usar un desarrollador branchen este caso?

Kayue
fuente

Respuestas:

59

Es mejor usar la rama maestra solo para la rama de producción y desarrollo para el ensayo. Cada desarrollador debe crear una rama local para agregar nuevas funciones y luego fusionarse con la rama de desarrollo. Si es nuevo en un git, intente usar - http://github.com/nvie/gitflow También hay una buena imagen que describe el modelo de ramificación de git - http://nvie.com/posts/a-successful-git- modelo de ramificación /

insecto.
fuente
Esta es una mejor respuesta. No estaba muy familiarizado con el concepto de ramificación de Git.
Kayue
@insecto. ¿Tiene un enlace a algún recurso que explique la rama de desarrollo -> enviar al sistema de ensayo y la rama maestra -> enviar al servidor de producción con más detalle? El magnífico artículo Un modelo de ramificación de Git exitoso no menciona esa parte, incluso si menciona muy buenos conceptos de ramificación y control de versiones.
Edgar Alloro
19

Su sugerencia parece estar bien, pero no permitiría que los desarrolladores empujen directamente al servidor de prueba. En su lugar, un integrador debe revisar cuidadosamente las ramas e incorporarlas en la rama principal (o rama de desarrollo si usa el modelo de flujo de git como lo sugiere bUg). * La misma persona empujaría al servidor de ensayo.

* Integrador : " Una persona bastante central que actúa como integrador en un proyecto grupal recibe los cambios realizados por otros, los revisa e integra y publica el resultado para que otros lo utilicen ... "


1. hacer un git init en el servidor de producción (¿es seguro?)

Sí, es seguro, pero, por supuesto, debe establecer permisos muy restrictivos en este repositorio. Probablemente empezaría porcurl guardar todo el sitio web en un disco local, si aún no lo tengo.

2. clonar el repositorio de producción al servidor de ensayo

Probablemente debería tener un repositorio "central" separado de los servidores de producción y de ensayo. Ese se puede clonar y enviar según sea necesario.

3. los desarrolladores clonan el repositorio de la etapa de pruebas en su máquina local

4. enviar archivos al servidor provisional después de terminar de cambiar

5. cuando la puesta en escena esté lista, envíe todo a la producción

Reemplaza "staging" por "central" y creo que estás bien, pero un problema mayor es cómo trabajarás con las ramas y la fusión, como señala bUg.

Felixyz
fuente
10
1: Para que el repositorio de Git sea seguro en producción, asegúrese de agregar un archivo .htaccess con "Denegar todo" adentro.
Kayue
2
2: El repositorio "Central" de Felixyz se refiere al repositorio desnudo. Utilice el comando --bare para crear un repositorio básico.
Kayue
1
@keyue 1: Aún mejor, agregue RedirectMatch 404 /\.gita su producción .htaccess para proteger su carpeta .gitignore , .gitattributes y .git .
Leo