Recientemente cambiamos de SVN a Git y al mismo tiempo pusimos nuestros sistemas en vivo en control de versiones (en lugar de pago local y copia de archivos en vivo).
En el proyecto al que estoy asignado, todos accedemos al mismo repositorio y para obtener cambios en vivo, solo estamos git pull
allí. Esto causa problemas porque nuestros diseñadores web introducen cambios en el VCS que aún no deberían estar activos pero deberían estar en el entorno de prueba web.
Cuando uno de los desarrolladores ahora entra en vivo, recibe todos los cambios (posiblemente sin terminar).
Pensé en cambiar en vivo a una rama adicional y fusionar lo que cambió, pero debido a mi falta de conocimiento git, no tengo idea de cómo.
Mi idea es:
- Cree una nueva sucursal en live (
git branch live
). - Cada vez que algo tiene que ir a vivir
- Cambios tirar de maestro (como:
git checkout master; git pull; git checkout live
) git merge master
- Cambios tirar de maestro (como:
El problema es que cambiar a maestro o arrastrar todo directamente al sistema en vivo causaría problemas, por lo que preferiría evitar esto.
¿Hay alguna manera de hacer esto o hay una mejor manera de administrar el sistema Live (excepto para entrenar a los webbies para que no empujen cosas inacabadas)?
git pull --all
de forma predeterminada, no extraerá master en vivo, extraerá master y lo fusionará con master, y (si existe en el servidor) extraerá live para combinar en live. ¿Lo intentaste?git checkout -f
para ignorar el problema, ¡pero haga una copia de seguridad!Respuestas:
Puede usar
git stash
antes de retirar master y pull, y después de revisar live nuevamente usargit stash pop
(o si su git es más viejo,git stash apply
ygit stash clear
suponiendo que no haya escondido nada más)fuente
git pull --all
buscará todos los controles remotos, pero aún intentará fusionar una rama (o la rama predeterminada) en la rama actual también.git fetch --all
podría haber sido una mejor respuesta--all
opción le dará una combinación de pulpo de las diferentes versiones de la rama en la actual ! Entonces, mi consejo es que se mantenga alejado a--all
menos que eso sea lo que busca, porque en la mayoría de los otros casos no le dará nada.Yo era capaz de tirar de cambios
origin/master
enmaster
mientras se trabaja en otra rama mediante el uso de este comando:fuente
fetch
! =pull
Resuelve el problema primero. No deberían estar presionando a una sucursal a la que no tienen negocios presionando.
Lo que parece estar preguntando sería algo así como
Esto intentará fusionar el maestro remoto y su rama en vivo.
fuente
Le recomiendo que cree un repositorio de prueba de git para que todos lo confirmen. Todos los repositorios, incluido su sitio web en vivo, serán clones del repositorio de prueba. De esta manera, cualquiera puede presionar para probar sin tocar el sitio web en vivo. Cuando alguien necesita actualizar el sitio en vivo, puede extraer el sitio en vivo del repositorio de prueba de git. Este flujo de trabajo es bastante similar a SVN. Para mayor flexibilidad, recomiendo usar la rama "en vivo" que usted describe.
Para resumir, el repositorio de git de todos es un clon del repositorio de prueba. El sitio de producción en vivo es solo un clon del repositorio de pruebas también. Alternativamente, las pruebas podrían ser un clon de producción en vivo para que un "empujón git" siempre se mueva hacia la producción.
Otras opciones incluyen agregar la rama "en vivo" a este acuerdo o incluir un repositorio de "puesta en escena" entre las pruebas y la producción. Para mayor seguridad, recomiendo restringir el acceso al live git repo y obligar a las personas a usar un script seguro que haga la producción de pull to live.
fuente