2010-03-19 11 views
5

Estoy en una posición en la que soy el único que usa git, todos los demás usan svn. He usado 'git svn' para conectarme al equipo svn y, en general, funciona bien. Últimamente, comencé un proyecto inicialmente solo, separado git repo y ahora necesito fusionar cosas de él al svn. Sin embargo, todavía me gustaría seguir ajustando la implementación en mi propia privacidad entre lanzamientos.Recolección de cerezas de git a svn (o, Cómo mantener un historial de proyectos en git y versiones en svn)

Entonces, ¿cuál sería la forma más directa de seleccionar algunas confirmaciones de mi repositorio privado para el repositorio svn-clonado? El requisito es mantener el historial local completo y tener un solo compromiso svn para cada selección. ¿O hay algún aplastamiento por hacer?

Como método para lograr esto, ¿hay alguna forma de obtener el repositorio privado como otro origen para el repositorio svn-clonado?

Respuesta

2

Puede intentar git graft la confirmación de su repositorio de Git a la confirmación del repo de git-svn antes de git dcommit git svn repo.

La confirmación de su informe podría estar aislada en una rama especial, cuando all kind of squashing se puede llevar a cabo para exportar un historial de limpieza.

1

Si usted es la única persona que usa el git repo en este momento, podría considerar volver a basar todo su trabajo sobre el clon de subversión vacío que ha creado. A continuación, configure una rama para mantener los empujes de regreso a la subversión, aplaste cada liberación y vuelva a asignarla a SVN.

Para una solución más en profundidad, considerar el uso de git commit-tree directamente - dotarla de árbol que desee confirmar (que se encuentra ejecutando git show --format=raw HEAD y mirando a la segunda línea ("árbol")), el padre correcta cometer (lo que está actualmente en subversión) y el mensaje de registro correcto en stdin. Esto está usando la tubería directamente, probablemente quieras escribir un script para que lo haga por ti ... El efecto es que has creado un nuevo commit que contiene el contenido del archivo de un commit existente (compáralo con cherry-pick, que toma la diferencia añadida por una confirmación existente, en lugar de copiar el árbol).

+0

Sí, soy el único usuario de git por ahora. ¿El replanteamiento implicaría que todo el trabajo futuro se realizará en el svn clonado? El svn repo clonado no es más que vacío ... Aunque, eso puede no cambiar nada. Así que, en resumen, podría reformular que mi proyecto es en realidad un subproyecto que se fusionará en un solo tronco que contiene múltiples proyectos relacionados en sus propios directorios. – Jawa

+0

No hay ninguna razón para hacer el trabajo en el repositorio que ha sido clonado directamente desde subversión, pero querría trabajar en sucursales que tienen el clon de subversión como su principal. Puede lograr esto al volver a colocar las ramas redefinidas en su repositorio de trabajo y usar 'git branch -f' para configurar sus ramas de trabajo actuales para que apunten a sus referencias reordenadas. –