2010-01-14 11 views
6

Estoy usando git para rastrear un proyecto, y si es posible, me gustaría configurar las cosas para que git maneje todas las etapas de código, puedo tener un repositorio local para probar y luego enviar cambios al servidor con git para hacerlos vivir. Sin embargo, al tratar de usar las llamadas estándar git push, acabo terminando con una bifurcación inconsistente y un lío terrible de historias conflictivas. ¿Hay alguna manera de gestionar la puesta en escena usando git?¿Puedo usar git para mantener un servidor remoto actualizado?

Respuesta

9

Usted tiene en este blog post un ejemplo de Git repo utilizada para la estadificación:

IDE => local Git repository => remote bare Git repository 
            => Git repository with the live web application 

se trata de un gancho posterior a la actualización en el lado de recompra desnuda, con el fin de activar la actualización de la cesión temporal en el vivo lado del servidor web.

El último paso es definir la secuencia de comandos de enlace "post-actualización" en el repositorio simple, que se invoca cuando el repositorio simple recibe datos.
Para activar el enlace "post-actualización", tenemos que hacer hooks/post-update ejecutable o renombrar hooks/post-update.sample a hooks/post-update, dependiendo de la versión de Git.
En este script, simplemente cambie a la carpeta de la aplicación en vivo, e iniciar la operación de extracción:

#!/bin/sh 
cd $HOME/example.org 
unset GIT_DIR 
git pull bare master 

exec git-update-server-info 

La razón por la que hay un acuerdo de recompra a distancia desnudo es porque está “desanimado” a hacer un push en un repositorio con un directorio de trabajo.

+0

¿Cuál es el beneficio del repositorio desnudo? En la medida en que se desaconseja empujar hacia un árbol de trabajo, no se ha ganado nada más que complejidad agregando este paso intermedio. No he probado esto y no conozco a Git tan bien, así que si elaboras más que sería mucho más útil – SamGoody

+0

@SamGoody: en realidad, preferiría no utilizar el * tercer * repo para la implementación del sitio web en vivo , pero el segundo * necesita * ser simple para asegurarse * de que ninguna modificación local interfiera con usted empujando nuevos commits a él *. Ver http://stackoverflow.com/questions/5490434/git-live-server-best-practices/5491039#5491039. El gancho post-recepción combinado con un archivo git (un alquitrán que se extraerá) es mejor. – VonC

+0

Tal como está, el trabajo se realiza ocasionalmente en el servidor activo, y luego se fusiona hacia atrás con las computadoras de desarrollo. (Concediendo que nuestra configuración sea inusual, es correcta para nuestras necesidades). Necesitamos que el servidor en vivo tenga la capacidad de recibir y enviar cambios. Lo ideal sería que, al presionarlo, los cambios se combinen en [o se debe registrar un error]. El archivo de Git no sería adecuado. Esta solución sería, pero ¿por qué no presionar directamente? – SamGoody

0

Aunque git es un sistema de control de versiones distribuidas, generalmente es una buena idea tener un repositorio central (podría ser uno --bare). Simplificará las cosas.

+0

Sí, pero ¿cómo ayuda esto con tener que gestionar una sucursal de etapas y una sucursal de producción y una o más ramas de desarrollo? – Thilo

+0

¿Debo tener un repositorio central, clonarlo tanto localmente como en el servidor activo, y luego SSH en y hacer extracciones manuales para actualizar? Eso tiene sentido, pero parece que debería haber una solución más elegante. – futuraprime

+0

Un depósito central desnudo en el servidor en vivo sería suficiente. Dado que tienes historias conflictivas, supongo que realizas algunos cambios en el sitio de producción. Si hacer eso te parece conveniente, entonces las tiradas manuales deberían estar bien. Si puede continuar sin dichos cambios, use el enlace posterior a la actualización según lo sugerido por VonC. –

Cuestiones relacionadas