¿Cómo funciona el git "local-repositorio" concepto difieren de los "desarrolladores " ramas"?

StackOverflow https://stackoverflow.com/questions/5827687

Pregunta

En un trabajo anterior, me pareció más fácil de administrar y mantener estable el pre-lanzamiento de la rama (o principal, dependiendo de la configuración) por cada trabajo de desarrollador en su propia rama.Sólo teníamos una sola instancia de producción, por lo que no necesita el apoyo de varias versiones de las mismas apps.

Este "pre-lanzamiento" rama se denomina de esa manera porque no había otra rama (principal) donde haríamos nuestra puesta en escena y la producción de versiones de.Las ramas eran de configuración tal que sólo el código de la versión pre-release de la rama de que se unieran en la liberación de la rama.Estos combina fueron nuestro código de revisión de los puntos de control.El CI se basa se hicieron a partir de este pre-lanzamiento de la rama, como bien corresponde a cada desarrollador de combinación de "pre-release" a su propia rama a migitage complejo de fusión de problemas cuando el desarrollo para que el cuerpo de la obra fue terminada.

Si hay una necesidad de que los desarrolladores pareja y trabajar juntos de una característica determinada, nada más que sus propias ramas permisos les impidió trabajar con otros.Esto funcionó bien para la gestión de equipos distribuidos en donde los individuos dentro de cada equipo estaban trabajando en independiente/características múltiples.

Con la ayuda de frecuente (1-2 veces por semana de 30 minutos, actualización de estado, reuniones de nosotros, como equipo, decidiría lo que iría en control de calidad y lo que no para que el particular QA liberación.

Este sistema funcionó, pero me parece un montón de resentimiento por el promotor de las ramas cuando se busca en este tema.Parece ser que hay una gran cantidad de entusiasmo acerca de git local del repositorio característica.Sin embargo, parece que no son sólo diferentes maneras de abordar los mismos problemas.No considerando la cruz-los problemas de la red que los repositorios locales de la dirección, tales como cheque en la latencia y tal.

¿Fue útil?

Solución

Hay tres diferencias principales:

  1. Repositorio Local significa simplemente que:Es local en tu sistema, y si alguna vez te encuentras perdido en una isla desierta sin conexión a Internet, usted todavía será capaz de confirmar sus cambios.Una de las mejores cosas acerca de Git es que usted no tiene que estar conectado a su repositorio para ser capaz de tomar ventaja del sistema de control de versiones.En ocasiones, los desarrolladores trabajar de forma remota, sin poder acceder al repositorio principal y que por lo general puede ser un poco incómodo cuando usted tiene un sistema como Subversion, Perforce, u otro tipo de repositorio centralizado sistema de control de versiones.Con Git y BitKeeper, usted puede fácilmente trabajar sin conexión.

  2. En un desarrollador rama situación, que normalmente son de la ramificación de la integración rama a su desarrollador rama y la fusión de la integración la rama.En Git, no se combinan, pero enviar parches y usted puede enviar sus cambios no sólo a la repositorio principal, pero para otros desarrolladores sin enviar primero el parche para el repositorio principal.Esto permite a los desarrolladores trabajar juntos sin tocar el repositorio principal.

  3. En un desarrollador/integración rama de la instalación, el desarrollador rama está en el repositorio, lo que significa que otros la vean.En Git, el desarrollador de cambios no están disponibles hasta que el desarrollador ofrece a sus cambios.

Otros consejos

Un DVCS como Git o Mercurial presenta un flujo de trabajo de publicación (Push/Pull) que es ortogonal a ramificación.

Eso significa que:

  • A pesar de que todos los desarrolladores están trabajando en la misma rama, pueden hacerlo "en privado" en su propio repositorio: siempre que no publiquen, funcionan (es decir, empuje a un repositorio aguas arriba), esa rama común es en realidad suya. Pueden tirar (buscar + fusionar) regularmente para no divergir demasiado del trabajo de los demás sobre el mismo tema, pero presionarán cuando estén listos.

  • Un desarrollador nunca podría impulsar su trabajo, pero un integrador puede obtener, de un repositorio de "integración" aguas arriba, como muchas ramas (con el mismo nombre) de tantos reposadores de desarrolladores que el integrador necesita: cada rama se almacenará en el repositorio de integración en su propio espacio de nombres (dev1/branch, dev2/branch, dev3/branch, ...)
    A partir de ahí, el integrador puede observar los confirmaciones de que la rama de cada desarrollador está introduciendo y decidir fusionar o no esos cambios en el repositorio de integración.
    Nota: Esto es ligeramente diferente en Mercurial, desde que la rama nombrada tiene nombres en un espacio de nombres global (ver Jakub NarębskiRespuesta sobre "Git y mercurial: comparar y contrastar", mirando a la "Opinión personal: personalmente creo que" Ramas nombradas "..." parte)

Entonces, un "repositorio local" de GIT transforma cualquier rama en una rama de desarrollador (que no impide que un desarrollador haga su propia rama privada encima de las que provienen de un repositorio común).
Esas ramas están disponibles para la publicación activa (impulso del desarrollador) o publicación pasiva (tracción o obtenga de un repositorio aguas arriba, sin intervención directa de dicho desarrollador)


Qué David W's responder (Votado) deja más claro la diferencia entre:

  • Trabajar desde una sucursal en una nueva rama (que podría estar vinculada a un desarrollador, aunque prefiera las ramas vinculadas a una tarea o un conjunto de tareas, para aislar un esfuerzo de desarrollo: ver "¿Cuándo deberías ramificar?")
  • Trabajando desde una rama clonada de un repositorio en su propio repositorio: puede trabajar en el mismo rama, excepto que es una (copia) clonada de dicha rama de un repositorio aguas arriba.
    Si el repositorio del desarrollador no es accesible por un integrador, entonces sí, como David dice: "En GIT, los cambios del desarrollador no están disponibles hasta que el desarrollador entrega sus cambios".
    Si el repositorio del desarrollador es accesible (incluso a través de un simple "protocolo local"Como una parte de la red), los cambios del desarrollador se pueden extraer del repositorio posterior a un repositorio aguas arriba de integración)

Ver también "Describa su flujo de trabajo de usar el control de versiones (VC o DVC)"Para otra forma de contrastar la forma centralizada de VCS de usar ramas frente a la forma descentralizada de VCS de usar repositorios.

Si funcionó para ti, genial. Creo que encontrarías que funcionaría aún mejor con un DVCS, porque pueden apoyar todo lo que estás haciendo ahora y más.

Una ventaja de un repositorio local sobre una rama de desarrolladores es que puede tener tantas ramas como desee localmente. Puede girar una rama rápida para probar algo que tiene curiosidad. Puede girar una rama para probar la migración a la última versión de esa biblioteca que le encanta. Todo sin necesidad de "contaminar" el servidor centralizado con cosas que tal vez nunca deberían ver la luz del día.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top