¿Los grandes repositorios mercuriales sufren de una "carrera de empuje"?

9

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

  1. El usuario intenta empujar
  2. Desactualizado (mercurial no le permitirá presionar si su repositorio local está desactualizado), por lo que extrae y fusiona sus cambios locales
  3. El usuario intenta presionar nuevamente, pero mientras estaba fusionando, otra persona presionó, por lo que está desactualizado nuevamente
  4. Tire y fusione nuevamente
  5. Aún fuera de fecha
  6. 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?

TheLQ
fuente
¿Quién no se ramifica en mercurial? hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Carson Myers
@Carson En git las ramas son baratas. En mercurial son mucho más permanentes. En general, he oído que en git se ramifica para trabajar en una característica, en mercurial crea un nuevo encabezado o clon en un directorio diferente.
TheLQ
bueno, puede agregar un --close-branchal comprometerse - y mercurial ha nombrado ramas, no tiene que clonar a un nuevo directorio
Carson Myers
@Carson No digo que no puedas o que no es posible, solo digo que siempre escuché que la convención era clonar o crear una nueva cabeza, no una rama. La mayoría de los repositorios mercuriales que he visto solo tienen unas pocas ramas, mientras que los repositorios git tienden a tener un montón
TheLQ
No estoy seguro, nunca he usado git
Carson Myers

Respuestas:

8

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.

Ed James
fuente
Siempre he escuchado que clonas para trabajar en funciones experimentales, no en ramificaciones. La mayoría de las razones que escuché es que en las ramas mercuriales son mucho más permanentes que en Git. Sin embargo, podría estar equivocado
TheLQ
Esa es la cuestión, en lo que respecta al mercurial, un clon es una rama, aún puede hacer casi todo lo que puede hacer con una "cabeza" estándar (¡y algunas cosas más!), Pero tiene el lujo adicional de la extracción / Empuje el nivel de distancia del tronco. No estoy seguro de lo que quieres decir con permanencia, cuando hayas terminado con tu clon, simplemente puedes eliminarlo.
Ed James
¿Cómo es que no hay 5pm push push?
Cem Catikkas
Como dije, la mayoría de las veces todos trabajan en su propia sucursal (es muy poco probable que trabajen exactamente en el mismo problema que otra persona), por lo que si bien todos presionan al final del día, es a diferentes sucursales. Además, en mi trabajo tenemos tiempo flexible, por lo que es más de 4 pm-6pm rush;)
Ed James
1

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.

Rein Henrichs
fuente
El OP hace una distinción sobre git y hg aquí, pero su respuesta está dirigida a git (el primer enlace está muy orientado a git, por ejemplo). Es una respuesta correcta (ya que la interpretación errónea original de OP de la ramificación en hg conduce a la pregunta en sí), pero vale la pena señalar que es lo mismo para hg.
Ed James
@Ed Buen punto, actualizado para aclarar que la respuesta se aplica tanto a git como a mercurial.
Rein Henrichs
vea el repositorio git.git, es un buen ejemplo de fusión usando DVCS. Hay muchos puntos de fusión. Puede haber más de 10 ramas temporales al mismo tiempo antes de finalmente fusionarse en la rama principal.
linquize