2009-01-08 25 views
18

Tengo un repositorio git local creado con git svn clone. Hago una sucursal local, realizo algunos cambios, vuelvo a la maestra, git svn rebase y si todo está bien, fusiono mi rama nuevamente en maestra. Entonces el árbol se ve algo como esto:¿Por qué git svn dcommit pierde el historial de fusiones de fusiones para sucursales locales?

alt text http://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg

A veces, más tarde, cuando git svn rebase de nuevo y algunos cambios remotos, pierde el hecho de que a_branch se fusionó con la línea principal y el árbol se ve así:

alt text http://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg

¿Por qué es eso? ¿Puedo detenerlo? ¿Hay alguna manera fácil de decir que se ha fusionado una sucursal, o debo eliminar mis sucursales cuando haya terminado, para no olvidar lo que se ha fusionado y lo que no?

Respuesta

22

La página de manual de git-svn recomienda que no utilice merge. Este es un efecto secundario. Ya que está rebasando la rama (git svn rebase es un poco como "git pull --rebase") efectivamente reescribe la historia. Puede descartar cualquier confirmación local que ya esté en sentido ascendente en subversión, como la combinación, y conservar solo las confirmaciones que realmente existen en el repositorio svn. Debido a que una confirmación de fusión trivial de una sucursal local no tiene equivalente en SVN, solo compromete los cambios "reales", por lo que estos son los únicos cambios que se ven en su nueva rama maestra reestablecida.

Lo ideal es que su sucursal local fusione solo el avance rápido, es decir, no se genere ningún compromiso de fusión. Si este no es el caso, entonces debería considerar volver a establecer la base de su rama local en el maestro en lugar de fusionarlo. Eso evita crear un commit de fusión por completo.

+1

+1 para git rebase master – JoaoHornburg

0

Porque estás pasando por svn. Perderá mucha información cuando lo haga (también pierde al autor, por ejemplo).

Cuestiones relacionadas