2012-04-19 9 views
16

Pregunta breve: ¿cuál es el equivalente git-svn de svn up -r r1130 para actualizar solo a una confirmación numerada (con el número svn)?¿Puedo convertir svn rebase a una cierta revisión de svn? (Similar a svn up -r ...)

Estoy usando git-svn para poder usar git y administrar (muchas) sucursales locales del repositorio svn de mi equipo. Tengo una versión del software que heckear para trabajar con una configuración de hardware particular. Desde la última vez que trabajé con él, el svn repo ha avanzado más allá de un punto estable y bueno para este trabajo. Quiero actualizar la rama local a una revisión numerada que representa la confirmación estable. Podría hacer esto en svn con svn up -r r1130, pero prefiero git.

Sigo olvidando cómo he hecho esto en el pasado y me encuentro buscando SO y las páginas de ayuda tratando de encontrar la mejor manera. Tal vez hay una Q diferentemente redactada Q & que me falta?

Es bastante fácil simplemente ver la revisión anterior en un árbol limpio, pero cuando llevo confirmaciones en la parte superior del árbol, la parte "rebobinar el cabezal para reproducir su trabajo en la parte superior ..." ¡Usualmente amo significa que iré a un punto en el árbol antes de que mis cambios sean agregados!

Por ahora, voy a git svn rebase y luego rebase interactivamente para anular las confirmaciones que no quiero, pero tengo problemas para creer que esta es la mejor o incluso una buena forma de hacerlo.

Respuesta

18

Prefiero rebase porque git-svn va a tener que volver a establecer sus cambios de todos modos antes de dcommit. Tal vez puedas probar:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b master_r1241   # Create a new brach matching it 
git checkout hwTesting     # Merge previously created changes 
git rebase master_r1241    # rebase on top of not quite up-to-date master branch 

Usted puede hacer esto en un solo paso también: (siempre podría volver usando reflog o rebase --abort si las cosas van muy mal).

git checkout hwTesting     # Checkout feature branch 
git rebase `git svn find-rev r1241` # rebase on top of not quite up-to-date master branch 
+0

Finalmente tuve la oportunidad de probar esto y la versión de un paso de esto es exactamente lo que estaba buscando. ¡Gracias! – sage

1

No parece haber una manera de hacerlo en un solo paso. Sin embargo, puede encontrar fácilmente la id de confirmación de git correspondiente para un número de revisión svn dado. Pruebe esto:

git svn find-rev rN 

donde N es el número de revisión que desea. Después de eso, usa git checkout para verificar ese punto específico en el historial.

+0

Este es un comando útil que es generalmente útil, pero si estoy en una rama que tiene nuevas confirmaciones y I 'git svn rebase' esa rama, entonces se volverá a reproducir mis nuevas confirmaciones en la parte superior de la confirmación SVN en cuestión. Su comando verificará el * svn commit * no modificado, es decir, sin mis cambios comprometidos en la parte superior. Quizás podría hacer esto, luego crear una nueva rama en ese punto, y finalmente fusionar esta nueva rama en mi rama de características. – sage

+0

Buen punto ... Creo que habitualmente tiendo a git svn rebase en rastrear ramas solo ...De esa forma, mis ramas de características permanecen intactas hasta que estén listas para integrarse con la línea principal. Tomé su pregunta para preguntar cómo actualizar y luego pasar a una revisión específica en los nuevos commits. –

0

Lo dejo como referencia, ya que la respuesta aceptada lo menciona. Use la opción de rebase de una sola línea, aunque ...


Aquí es lo que estoy haciendo por ahora. Esta vez estoy actualizando desde r1130 (mencionado en la pregunta) a r1241:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b hwTesting_r1241  # Create a new brach matching it 
git merge hwTesting_r1130    # Merge previously created changes 

Esto sobre todo me da lo que quiero, pero genera otra rama cada vez que pongo al día. Parece que debería haber alguna manera de decirle a git que fusione solo las confirmaciones en el maestro hasta e incluyendo la que devuelve git svn find-rev r1241.

Cuestiones relacionadas