2009-02-21 15 views
10

gente git-svn estoy frente a los conflictos de código repetidos mientras tira del repositorio git compartida en el siguiente escenario:evitar conflictos durante el uso de

  1. Hay un repositorio SVN común

  2. Hay varios desarrolladores que rastrean/sincronizan este svn repo común con sus propios repositorios git locales utilizando git-svn bridge (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 svn repositorio. Para este propósito, configuraron un repositorio git compartido e intercambiaron su trabajo usando los comandos pull/push

  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?

Respuesta

8

git-svn(1) dice:

En aras de la simplicidad y interoperar con un sistema sea menos capaz (SVN), se recomienda que todos los usuarios de git-svn clonar, ir a buscar y dcommit directamente desde el servidor SVN, y evitar todas las operaciones git-clone/pull/merge/push entre repositorios y ramas git. El método recomendado para intercambiar el código entre las ramas de git y los usuarios es git-format-patch y git-am, o simplemente 'comprometiendo 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.

3

Lo que descubrí es que la fusión de git-svn cambia a varias ramas de git y entre ellas 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 fusiona sus cambios nuevamente a svn manualmente (por ejemplo, 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.

Cuestiones relacionadas