2012-03-21 17 views
8

acabo de descubrir que a pesar de la sección rebase en git help svn diceCómo git svn fetch + rebase en una sola operación?

Este Obtiene las revisiones de los padres SVN del actual jefe y rebasa la corriente (no comprometidos a SVN) trabajan en contra de ella.

(el subrayado es mío) que no quiere decir que rebase incluye un git svn fetch. Dejando a un lado el nombre, ¿hay alguna forma de ejecutar un solo comando git svn para hacer ambos?

La razón por la que quiero hacer esto es que sólo de escritura en una rama, así que quiero rebase que uno y yo con frecuencia leído otras ramas, por lo que quiero fetch aquellos.

+0

No tengo experiencia con 'git svn' pero el' git pull' ordinario se puede configurar para usar 'rebase' en lugar de' merge' y de esta manera realiza los dos pasos que desee. Publicaba una respuesta si sabía cómo hacer eso con 'git svn' - solo buscaba un equivalente de' git config branch.autosetuprebase always'. –

+0

Significa. Sólo inténtalo. Primero busca y luego rebases. –

+2

No, no es así. 'git svn rebase' no * busca * nuevas ramas desde el control remoto, mientras que' git svn fetch' sí. Lo intenté. – l0b0

Respuesta

8

también estoy un poco sorprendido al saber que esto es en realidad la forma en que se comporta. Sin embargo, para responder a su pregunta, sólo tiene que definir un alias:

git config --global alias.refetch '!git svn fetch && git svn rebase'

Entonces git refetch debe hacer lo que quiera.

+0

Bastante justo; parece que no hay una forma estándar de hacer esto. – l0b0

+0

¿Por qué en la Tierra quieres buscar todos los repos svn solo para volver a basar uno solo? –

+0

@ l0b0: No hay una forma estándar de hacerlo porque no es una forma estándar de usar 'git svn'. 'git svn rebase' está diseñado para llevar tu rama actual al consejo de Subversion, por lo que ignora cualquier otra rama de Subversion a fin de obtener una copia de trabajo útil rápidamente. 'git svn fetch' actualiza todo desde el repositorio de Subversion, y con frecuencia es una operación mucho más lenta. Estoy realmente confundido acerca de lo que realmente estás tratando de lograr, lo que significa que debes ser capaz de hacer esto. –

-3
git pull --rebase 

También puede configurarlo para que se vuelva a establecer de manera predeterminada. A continuación, se puede:

git pull 

ACTUALIZACIÓN:

Uy. Necesite más café ...

Todo lo que puedo pensar es que la escritura lo que necesita ..

+0

extracción de svn repo? –

+0

@ AdamDymitruk: Esto es * no * sobre vainilla 'git' - Se trata de' git svn'. – l0b0

19

Creo que está confundiendo git rebase y git svn rebase. Los movimientos anteriores se comprometen con tu HEAD actual en alguna revisión que especifiques, mientras que la última mueve tu HEAD actual a la punta de la rama Subversion en la que te encuentras.

git svn rebasequé incluyen un git svn fetch --parent, es decir, se obtendrá ningún nuevo Subversion se compromete en la rama que está actualmente en, pero no cualquier subversión comete desde cualquier otra rama (contraste con una llanura git svn fetch, que obtiene de todas las ramas)

Sospecho que no desea hacer un total de git svn fetch cuando hace un git svn rebase, ya que significa que pasará mucho más tiempo antes de que obtenga una copia de trabajo utilizable. Si desea git svn fetch es habitual, le aconsejo configurar un trabajo de cron que haga la búsqueda en el fondo para usted.

+0

usted es tan correcto –

+0

Bastante una publicación anterior pero me parece relevante. I ABSOLUTAMENTE quiero obtener todas las actualizaciones de las sucursales antes de hacer un git svn rebase. ¿Por qué? Porque he tenido muchos problemas al fusionarme si no hago esto. Es muy fácil olvidarse de buscar cada rama que desee fusionar antes de fusionar y hacer esto: 'git svn rebase && git checkout master && git merge feature' antes de darse cuenta demasiado tarde de que no actualizó las ramas correctas de SVN. Si uno está usando git svn para soportar una mejor ramificación, tiene sentido SIEMPRE 'git svn fetch' todo antes de volver a basar. Si no 'git svn dcommit' pisotea todo. –

+0

Si hay demasiadas ramas en el repositorio SVN y se demoran para siempre, elimine '' 'de la línea de configuración' branches: 'y solo trate las ramas donde normalmente trabaja. Si está haciendo un combo 'master -> dev -> feature', es fácil tratar solo con las ramas que usan comodines y el archivo de configuración de git. De esta forma, cuando 'git svn fetch' no se obtienen ramas innecesarias. 'git svn rebase' ha roto por completo mi git y svn repo en el pasado porque svn no busca las ramas de antemano. No se traduce bien para mí. Podría ser una minoría aquí. –

Cuestiones relacionadas