2009-01-27 5 views
7

? Mi equipo desarrolla usando Git, haciendo un buen uso de muchas de sus características. Somos significativamente más eficientes en el uso de git que svn.¿Cómo se implementa desde svn cuando su repositorio original está en Git

Sin embargo, nuestro cliente actual quiere que implementemos el código de un repositorio svn, lo que significa que debemos mover nuestro código de git a svn de alguna manera.

En este momento estamos manteniendo un directorio que es tanto un checkout svn, como un git repo (contiene un .git y así sucesivamente) y luego podemos hacer git pull; svn commit

Por supuesto, el proceso es un poco más complejo, ya que queremos usar etiquetas para registrar puntos de lanzamiento, y hay una sobrecarga de ejecutar svn add en los archivos que ha creado git.

¿Cuál es la mejor manera de hacerlo?

¿Va a ayudar git-svn este problema? Nunca lo había visto más que para permitir que un desarrollador individual use las herramientas git localmente, cuando se usa un repositorio SVN. No tengo idea de qué tan bien funcionaría con múltiples desarrolladores trabajando en múltiples sucursales ...

Respuesta

6

Si se considera que una persona es el integrador de todo el código para SVN, y usted sabe que nadie más está contribuyendo al repositorio SVN, usted podría tener que use git-svn para empujar cambios: utiliza

  1. Integrador su master como una rama de seguimiento para sVN (por ejemplo svn git clone $ REPO). Nunca funciona en esta rama
  2. desarrolladores trabajar de forma normal (presumiblemente en ramas puntuales, con algunas ramas de integración de la línea principal)
  3. Cuando usted quiere hacer un lanzamiento, integrador tira todo el código de desarrollador para su rama principal (no master, sino algo así como integration)
  4. Integrador hace lo que sea necesario para asegurar la liberación es bueno para ir
  5. Integrador se fusiona con su integrationmaster
  6. Integrador hace git svn dcommit

Si otros están contribuyendo a SVN, todavía podría hacerlo de esta manera, pero el integrador tendría que tirar de forma regular desde SVN y hacer esos cambios estén disponibles para los desarrolladores a fin de evitar conflictos de fusión.

En cualquier caso, obtener el código en SVN sin muchas molestias es el problema principal. Puede etiquetar y la rama en SVN sin una extracción local para el integrador podía hacer el etiquetado (no estoy seguro si git svn enviará etiquetas a SVN o no) respuesta

1

de davetron5000 es probable que básicamente lo que quiere. Sin embargo, va a haber un truco para configurarlo. Si configura su árbol de integración para que tenga un control remoto para el repositorio svn y un control remoto para el árbol git original, sospecho que git no los reconocerá como relacionados. Probablemente necesites configurar un archivo de injertos que explique a git que tienen un historial compartido. De lo contrario, las fusiones siempre tendrán conflictos.

Este artículo parece que podría ayudar a averiguar cómo configurarlo correctamente, using git grafts to restore svn merge history.

0

cliente actual quiere que desplegar el código de un repositorio SVN ...

... se puede cumplir con este requisito, haciendo todo el desarrollo de un repositorio GIT y ejecutar scripts de creación que echa un vistazo a una instantánea de la construcción en Subversion?

Si es así, entonces esto va a trabajar con cambios mínimos en la construcción existente scripts que dependen de código de estar en un depósito de la subversión. Utiliza un cliente SVN para acceder a Git

> svn co https://github.com/restOfProjectURL/tags/BUILD-TAG-JAN-1-2015 

o

> svn co https://github.com/restOfProjectURL/branches/DEV-BRANCH-FIXES 

Si sus scripts de construcción incluyen el pago y envío (o algo parecido) para crear un directorio de trabajo local y luego desplegar desde allí, técnicamente están desplegando desde Subversion y se puede tomar ventaja de Git para todo lo demás.

(esto fue con la ayuda de https://help.github.com/articles/support-for-subversion-clients/)

Cuestiones relacionadas