2012-10-05 52 views
27

Estoy haciendo un proyecto de desarrollo.git svn - ¿Puedo usar git y svn al mismo tiempo? no necesita interacción entre git y svn

La compañía está utilizando SVN, por lo que para main commit y checkout se debe hacer a través de SVN. Sin embargo, no me gusta SVN y soy un usuario de git. Como solo cuando pienso que mi código es bueno me comprometo con la compañía SVN, me gustaría usar git para mi propio historial.

No necesito usar git para hacer SVN cosa, ni viceversa.

¿Puedo la versión controlar mi mismo código usando SVN y git al mismo tiempo? Sin interacción entre ellos.

+1

Simplemente ignore la carpeta '.git' para SVN y la carpeta' .svn' para Git y debería estar bien. ¿O preguntas cómo básicamente empujar/tirar de ambos a la vez? – Blender

+0

¿Pero por qué? git funciona perfectamente bien con un repositorio svn en el otro lado, ¿por qué no sacar provecho de eso? –

+3

Es ciertamente posible, y un movimiento justo hacia sus colegas, no para impulsar cambios sin terminar. sin embargo, hay un gran peligro escondido allí: tenderá a hacer muy pocos commits al repositorio de las compañías. Eso significa que generará muchos más conflictos en comparación con sus colegas. Al usar subversión, tiene sentido usar un comportamiento de confirmación frecuente. Tuve que aprenderlo de la manera difícil :-) – arkascha

Respuesta

32

Puede clonar un depósito de subversión en su máquina usando git svn clone <SVN repo URL>. El código estará disponible como un repositorio git. Puedes hacer tu trabajo allí y realizar confirmaciones locales a tu gusto. Hay una opción de línea de comando para obtener un pago "superficial" en lugar de todo el repositorio que a menudo es útil. Olvidé lo que es.

En cualquier momento, desea ejecutar el equivalente de svn update, haga un git svn rebase. Esto buscará nuevas confirmaciones que se registraron en SVN después de la última sincronización y luego volvió a establecer la base de los cambios en la nueva sugerencia.

Cuando esté listo con sus compromisos, haga un git svn dcommit. Esto enviará todos tus nuevos commits a svn uno por uno. También puede aplastar sus compromisos locales en uno solo y enviarlo primero haciendo una rebase local y luego un svn dcommit. Esto debe hacerse en la rama inicial (generalmente master).

El hecho de que esté realizando un check out desde la subversión y trabajando localmente en git significa que existe una "interacción" entre ellos, por lo que su última declaración no es válida.

+1

Hubo una edición de la respuesta que debería haberse publicado como comentario. He revertido la edición y publicado la adición textualmente en este comentario. Comúnmente se considera una mala práctica el confirmar todos tus cambios como una única revisión (por ejemplo, ver http://stackoverflow.com/questions/107264/how-often -to-commit-changes-to-source-control y http://www.codinghorror.com/blog/2008/08/check-in-early-check-in-often.html). –