Integración automática entre diferentes VCS

Tengo una tarea para implementar la fusión automática continua desde un proyecto grande, de fuente abierta, basado en svn a un repository forzado bifurcado (nuestro cliente requiere forzosamente). Las características / cambios del cliente se desarrollan a la fuerza y ​​necesitamos integrar continuamente nuevos cambios desde el repository svn en sentido ascendente a forzado.

Comprendo claramente que no puedo get una herramienta perfecta que me sirva, porque las colisiones entre la comunidad y nuestros cambios obviamente ocurrirán y deberían ser resueltos por humanos, pero mi objective es hacer este process tanto como yo. posible automatizado El integrador debe prestar atención solo cuando algo salió mal. Para conducir tareas automatizadas, estoy usando Hudson, pero creo que esto no es importante. Solo estoy buscando una herramienta que pueda hacer lo siguiente para mí:

  • herramienta debe tomar svn changeset
  • aplicar diffs para forzar tenedor
  • eliminar / cambiar el nombre / mover files de forma forzada según svn (si corresponde)
  • cometer cambios a la fuerza
  • devolver error si algún paso no puede completarse

¿Qué herramienta podría ayudarme a hacer tales fusiones automatizadas entre diferentes VCS?

Método general

Este método funciona para casi cualquier situación, incluida la obtención de una biblioteca como tarball directo sin información de control de origen.

Al hacer algo como esto, siempre me resulta útil mantener la fuente limpia y original en un solo lugar en forzosamente (// depot / thirdparty / library, o algo similar). Esto siempre debe ser el código inalterado de la versión de la biblioteca externa que está utilizando. Una vez que esté en Perforce, integre desde allí a su versión y solo realice los cambios que necesite (si corresponde) a esta nueva versión.

Cuando la biblioteca original cambia y desea actualizar, ingrese a la fuente de terceros, sobreescriba a la fuerza todo con la nueva fuente, y luego diga forzosamente que lo que está en el disco es la versión correcta (Olvidé los commands, pero la pregunta ha sido respondida aquí en StackOverflow), y envíe eso. Tenga en count que si desea realizar un seguimiento real de los nombres de los files, esto no funcionará, pero para el desarrollo general del código funciona bien.

En este punto, tiene una biblioteca actualizada, que luego puede integrar nuevamente en su tree de trabajo. Esto usará Perforce para rastrear los diffs que aplicó, si los hay, contra los cambios en la biblioteca de origen. Por lo general, Perforce es bastante bueno para detectar cambios conflictivos, por lo que esto debería networkingucir el número de lugares que deben inspeccionarse a mano.

Una vez que esto esté en su lugar, puede automatizar una serie de pasos, y cuando Perforce no detecta ningún conflicto, toda la actualización puede realizarse automáticamente.

Esto tiende a funcionar mejor para las bibliotecas con actualizaciones ocasionales, pero no hay ninguna razón por la que no podría funcionar con una fuente de actualización frecuente.

Integración de herramientas

Las versiones recientes de Perforce incluyen un modo compatible con git, y git puede extraer de un repository svn, por lo que debería poder usar git como intermediario para manejar las actualizaciones con más detalles en los cambios. Aquí también debe haber un lugar que se considera fuente canónica, un lugar que contiene los cambios realizados en la biblioteca y el código resultante que usa Perforce. Si su cliente desea Perforce, le recomendaría que Perforce se use para rastrear las alteraciones en la biblioteca original, pero teóricamente el puente git podría usarse para esto también.