2010-07-12 11 views
11

Estoy tratando de determinar cómo las personas usan "repositorios de sucursales" mientras también usan subrepos.Mercurial Branch Repositories con SUBREPOS

Digamos que tengo cesión temporal que contiene principal un archivo de solución (NET), y se pueblan con subrepos A, B, C:

/Main 
    - A 
    - B 
    - C 
    MainSolution.sln 

A, B, y C, mientras que se comparte entre otros "Principal "repos, están muy estrechamente integrados en el proyecto principal. Por lo tanto, una característica principal del repositorio principal requerirá modificaciones en los subrepos (es decir, son bibliotecas compartidas, pero se desarrollan muy activamente).

Ahora es el momento de agregar una función. Esta característica es demasiado grande para que la maneje una sola persona y, por lo tanto, el código deberá enviarse al repositorio central para que otros puedan ayudarlo. También necesitaríamos poder volver al último código "estable" antes de que comenzara el desarrollo de la función en caso de que se necesite una corrección de errores. Creo que tengo dos opciones en este momento: (1) crear una rama con nombre en el repositorio principal, o (2) crear un nuevo clon de Main. Dado que hay subrepos, estas dos opciones tienen repercusiones que normalmente no se presentan.

Opción 1) Crear una rama con nombre supondrá, supongo, permitir que se confirmen/envíen modificaciones a los subrepos, pero solo otras personas que también hayan actualizado esa rama en su clon de Main se verán afectadas, ya que. El archivo hgsubstate es rastreado. Sin embargo, los subrepos obtendrán un nuevo encabezado y, por lo tanto, la característica (posiblemente) experimental terminaría siendo empujada al repositorio central. ¿Estoy entendiendo esto correctamente?

Opción 2) Hay numerosos defensores para "no utilizar ramas con nombre, usar 'repositorios de ramas'", que son literalmente clones del repositorio principal, pero con nombres diferentes y existentes en el servidor central. Esto es un poco atractivo para mí, ya que parece mantener las cosas separadas (y por lo tanto, separado del desastre, ya que los compañeros de trabajo, ¡y yo mismo !, todavía estamos aprendiendo sobre Mercurial). Pero este flujo de trabajo parece estar completamente roto cuando los subrepositorios están involucrados, ya que la creación de un clon del repositorio Principal no crea nuevos clones separados de los subrepos. Es un clon nuevo, pero sigue apuntando a los mismos subrepos y, por lo tanto, los cambios realizados en ellos encontrarán su camino de regreso a los subrepos. Me doy cuenta de que esto es por diseño, y es una de las cosas realmente geniales (para mí) sobre Mercurial. Pero, ¿cómo diablos las personas usan este flujo de trabajo de repositorio de sucursales con subrepositorios? Es completamente inconcebible que, para cada característica/experimento/versión/lo que sea, voy a crear un nuevo clon (en el servidor central) del repositorio Principal, Y crear clones (en el servidor central) de los subrepos, Y modificar todas las rutas .hgrc/.hgsub para apuntar a los repositorios centrales adecuados.

En este punto, solo trato de entender CÓMO las personas trabajan en un proyecto complicado y usan subrepos con repositorios de sucursales. ¿Alguna idea?

Respuesta

1

Prefiero las ramas con nombre para las características que con el tiempo se fusionarán en la sucursal predeterminada. Es mucho más fácil cambiar ramas que cambiar de repos.

Con ramas con nombre, nunca tendrá que preocuparse por empujar accidentalmente su rama inestable de desarrollo en el repositorio estable. La rama nombrada ya está allí, pero no se recuperará a través de una actualización a menos que un desarrollador lo solicite.

+0

Dos cosas. Cuando dice que una rama nombrada no se recuperará a menos que un desarrollador la solicite, ¿quiere decir que la copia de trabajo del desarrollador no se modificará a menos que esa rama esté desprotegida, o se está refiriendo a otra cosa? Tenía entendido que todas las ramas se empujaban/tiraban automáticamente. Además, la pregunta de la raíz no se trata realmente de si se usan ramas con nombre frente a repositorios de ramas, sino más bien cómo se usan los repositorios de sucursales cuando también se utilizan subrepositorios. ¡Pero gracias por la respuesta! – Andrew

+0

Las ramas con nombre se recuperarán con un "hg pull", pero los directorios de trabajo de los desarrolladores no se actualizarán a una rama diferente sin que se actualicen explícitamente al mismo p. Ej. "hg up -r ". Me parece que el mejor camino a seguir es el más difícil de desorden para un desarrollador. El problema del "genio de la botella" que ocurre cuando los repositorios de sucursales separados se juntan accidentalmente me hace creer que las ramas nombradas en un solo repositorio son preferibles. YMMV. Es cierto que probablemente me perdí parte de la complejidad añadida que viene con los subrepos. ¡La mejor de las suertes! –

+0

¿Alguien puede arrojar algo de luz sobre cuál es el escenario del "genio de la botella" que @MarkB describe aquí? –

3

Tiene otras opciones también. Podría usar marcadores, por ejemplo. Desde la versión 1.9, los marcadores pueden ser empujados y tirados, ya no solo son locales. Dado que a menudo no quiere que una "rama" de desarrollo permanezca como una sucursal con nombre después de que se complete esa nueva característica, los marcadores a menudo son una mejor opción para ese tipo de cosas. Tiendo a usar marcadores para nuevos desarrollos y guardar ramas reales para las versiones publicadas.

También debe tener en cuenta que los subrepositorios no tienen tienen para ser compartidos entre múltiples repositorios principales en la forma que usted describe. En realidad, puede tener los subrepositorios almacenados en como un repositorio principal (en lugar de tenerlos al mismo nivel que los repositorios principales, o almacenados en alguna otra ubicación), lo que los convertiría en únicos en cada repositorio principal, excepto puede empujar y tirar desde los subrepos en otros repositorios principales cuando desee compartir esos cambios. Esta es la forma en que generalmente lo hago.

Desafortunadamente, gran parte de esto es difícil de explicar sin una pizarra, así que por favor avíseme si esto no está claro.

Cuestiones relacionadas