¿Cómo se puede lograr el interfuncionamiento de la gestión del control de fonts?

Si bien se han formulado preguntas relacionadas antes, me gustaría ver una idea sobre cómo se puede lograr la interoperabilidad entre dos sistemas de administración de control de fuente (SCM). Por ejemplo, podríamos considerar cualquier SCM que exista (Mercurial, Git, SVN, CVS, Perforce, ClearCase …).

Principalmente estoy interesado si ClearCase se puede usar junto con SVN o Git / Mercurial.

¿Cómo puedo tener un tree fuente mantenido por ClearCase remoto mantenido por otro SCM también (al lado de ClearCase)?

Mientras que otros pueden usar ClearCase, nos gustaría usar el 'otro' SCM y comprometer cambios en ese repository. Los cambios en el repository de ClearCase deben realizarse de manera breve o periódica (y también debe actualizarse periódicamente desde el repository de ClearCase para asegurarse de que tenemos las últimas fonts)

Todos los ejemplos / experiencias (otros / relacionados) son bienvenidos. Gracias !

PD: Esto no se trata de eliminar ClearCase (lo haría con gusto), se trata de trabajar con dos controles de fuente al mismo time en el mismo tree fuente.

Realmente recomiendo no mezclarlos. Administrar un SCM es una tarea lo suficientemente compleja que no desea que el usuario regular tenga que tratar con varios de ellos.

Si todavía quieres mezclar, SCM distribuido como Mercurial o git tiene algo bueno, que es la capacidad de usarlos sin imponerlos a nadie. Cada desarrollador / equipo puede administrar su copy / sucursal local en git o mercurial sin que nadie lo sepa.

git + subversion o mercurial + subversion tienen la ventaja de que empujar al repository principal es parte de la herramienta, pero uno puede vivir sin ella.

En tu caso, parece que ClearCase te obliga pero quieres usar una alternativa. Puede decidir usar git en su equipo y regularmente enviar la twig principal a ClearCase.

Una cosa que me viene a la mente es git-svn : "Proporciona un flujo de cambios bidireccional entre un Subversion y un repository git".

Mientras puedas hacer que otros SCM ignoren a los demás (a través de un tipo de file .cvsignore / .hgignore ) o los hagan cooperar (como git svn ), no veo por qué no puedas hacer eso. Ya lo hago a través de svn / Hg / git y CVS.

De una manera muy genérica, siempre puede asignar el encabezado actual del repository "foráneo" (ClearCase en su caso) a una sucursal git, volver a establecer su propia sucursal y devolver el resultado al repository "extranjero". Enjabona, enjuaga, repite.

El problema con la interoperabilidad entre dos administración de control de fuente (SCM) es si un SCM tiene un model más rico que otro (por ejemplo, Subversion anterior a 1.5.0 no almacenaba todos los padres de una fusión si no usaba svnmerge o SVK, mientras que el SCM más moderno restring fusiones: Mercurial no admite fusión de pulpos, es decir, se fusiona con más de dos padres).

Hay al less algunos types diferentes de soluciones que conozco:

  • solución genérica de interoperabilidad SCM, como el estándar de intercambio de import rápida creado en Git pero respaldado por Bazaar y creo que también por Mercurial, o herramientas como Tailor (pero Tailor tiene su limitación)
  • herramientas específicas , que utilizan SCM API o SCM scriptability, como git-svn entre Git y Subversion (utiliza Subversion Perl API) o git-p4 entre Git y Perforce
  • a mano, es decir, utilizando el área de trabajo común (directory de trabajo) obteniendo los cambios (revisando) de un SCM y agregando los cambios (comits) a otro SCM. Esto requeriría configurar los files de ignorar apropiados, por lo que un SCM ignora otros files y directorys auxiliares específicos de SCM.
  • emulación de server en el caso de interacción entre SCM centralizado (como CVS) y otro SCM (como Git) emulando el server para SCM centralizado, pero teniendo repository en otro SCM, como git-svnserver
  • back-end de datos donde un SCM (como Bazar o Darcs) almacena cambios (datos) en el repository en otro formatting SCM. No sé el ejemplo para tal solución.

Estoy de acuerdo con BlueBird75 : mezclar dos references diferentes no es una buena idea, por la misma razón no es una buena idea tener varias bases de datos con el mismo tipo de información. La synchronization y la duplicación no son fáciles de administrar en esos casos.

Nosotros "publicamos" algunos datos administrados en nuestros repositorys de ClearCase (VOB) a otros VCS (Subversion, Perforce, …) o repositorys (como Maven), para otros equipos que no usan ClearCase. Sin embargo, los datos exportados son solo entregas .

Una "unidad de entrega" es un set de files empaquetados pequeño ('pequeño' y con el menor número de files posible): jar, war y ear son todos ejemplos de dichos files empaquetados, pero también incluimos orígenes (comprimidos en un file zip), javadoc (también comprimido), script para ejecutar esta entrega, y así sucesivamente.

De esta forma, solo se exportan unos pocos files a los clientes, y solo cuando se genera una entrega y representan una versión estable significativa.