subgit migrar svn git version-control git-svn

subgit - migrar svn a git



Evitando conflictos durante el uso de git-svn (2)

La gente me enfrenta a conflictos de código repetidos mientras saco del repositorio de git compartido en la siguiente situación:

  1. Hay un repositorio svn común

  2. Hay varios desarrolladores que rastrean / sincronizan este repositorio svn común con sus propios repositorios git locales usando el puente git-svn (a través de git svn rebase / dcommit)

  3. De vez en cuando, estos desarrolladores que usan git necesitan compartir sus cambios sin afectar el repositorio de svn. Para ello, configuran un repositorio de git compartido e intercambian su trabajo utilizando comandos de extracción / inserción

  4. Resulta que estos desarrolladores pueden enfrentar problemas de conflicto debido al uso de "git svn rebase" para sincronizar con el repositorio svn principal. Esto sucede porque la operación de rebase reescribe el historial de la rama de git local y se vuelve imposible insertar en el repositorio de git compartido y extraerlo a menudo lleva a conflictos.

¿Alguien tiene el mismo problema?


git-svn (1) dice:

En aras de la simplicidad y la interoperación con un sistema menos capaz (SVN), se recomienda que todos los usuarios de git-svn clonen, capten y realicen compromisos directamente desde el servidor SVN, y eviten todas las operaciones de git-clone / pull / merge / push entre repositorios y ramas git. El método recomendado para intercambiar código entre git branches y los usuarios es git-format-patch y git-am, o simplemente''comprometing'' al repositorio SVN.

Si su situación lo permite, puede usar ramas (es decir, subdirectorios) en el repositorio SVN para aislar su trabajo de los otros desarrolladores.


Lo que descubrí es que la fusión de git-svn cambia a varias ramas de git y entre ellos está bastante bien. El punto donde comienzan los problemas de git-svn es fusionar estos cambios a svn (o mejor dicho, a la rama git desde la cual se compromete). Me parece que la mayoría de estos problemas se pueden evitar si combina los cambios de nuevo a svn manualmente (por ejemplo, mediante git diff | patch ). Esto quitará la historia de las cosas que fusionas, pero los usuarios de subversión están acostumbrados a esto, no es un gran problema.