Leyendo algunas respuestas de "Por qué un DVCS es mejor" responde a varias preguntas sobre programadores. Todos ellos parecen decir que, en general, DVCS es mejor ya que no tienes una carrera de compromiso en proyectos grandes, es decir, un compromiso fuera de fecha. actualizar, confirmar, desactualizado nuevamente, confirmar, aún desactualizado, etc.
DVCS limita esto con el concepto de empuje. Sin embargo, en proyectos muy grandes, ¿no habría una "carrera de empuje", especialmente al final del día? Sé que en Git esto se soluciona un poco con la ramificación constante de todo, pero en Mercurial no se ramifica, crea una nueva cabeza.
Problema veo
- El usuario intenta empujar
- Desactualizado (mercurial no le permitirá presionar si su repositorio local está desactualizado), por lo que extrae y fusiona sus cambios locales
- El usuario intenta presionar nuevamente, pero mientras estaba fusionando, otra persona presionó, por lo que está desactualizado nuevamente
- Tire y fusione nuevamente
- Aún fuera de fecha
- Repetir
¿Suena familiar?
¿Es este un problema real con repositorios mercuriales muy grandes y populares? ¿Qué pasa dentro de una empresa cuando todos hacen su último empujón del día?
hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
--close-branch
al comprometerse - y mercurial ha nombrado ramas, no tiene que clonar a un nuevo directorioRespuestas:
Hasta donde yo sé, la mayoría de los grandes proyectos de código abierto que utilizan DVCS utilizan "solicitudes de extracción" en lugar de solicitudes, es decir, un usuario solicita que el proyecto se retire de su rama, y el proyecto puede optar por realizar estas solicitudes de extracción en cualquier orden , como mucho. Esto elimina las necesidades de la "carrera de empuje", como la llamaste.
En otras compañías no puedo responder por el proceso, pero donde trabajo no es un problema.
Vea, cuando está trabajando en un caso, está trabajando en una rama del repositorio completo, por lo que sus solicitudes de inserción van a una versión remota de la troncal principal. Cuando desee integrar su cambio (terminado) en el tronco, cargue el tronco, tire, fusione, empuje.
Ocasionalmente ( muy ocasionalmente) dos personas intentarán hacer esto al mismo tiempo (lo habitual debido a alguna falta de comunicación). En este caso, el que "pierde" solo tendrá que volver a tirar, fusionarse, empujar. Como no hay prisa a las 5 p.m. para comprometerse con un repositorio central, el problema que ha descrito no está realmente allí.
Esa es la belleza de DVCS: la ramificación es indolora, por lo que todos pueden trabajar en su propia rama.
EDITAR
Oh, acabo de notar tu comentario "In mercurial no ramificas ...": Sí, lo haces. No tiene que hacerlo, pero dado que es tan fácil y los beneficios de hacerlo superan a no hacerlo en gran medida, tiende a ramificar mucho los repositorios.
fuente
No, no hay una carrera de empuje porque el trabajo se realiza en ramas temáticas . Un maestro de combinación administra la complejidad (relativamente menor) de combinar las ramas en una rama de integración . Esto generalmente se hace de forma continua. Para obtener más información sobre los flujos de trabajo de control de versiones distribuidos, la primera fuente sería la boca del caballo:
man gitworkflows
, en línea aquí . Flujos de trabajo mercuriales hacen uso ramificación pesar de su reclamo y las técnicas son similares.fuente