2008-09-30 28 views

Respuesta

4

Al crear el clon, utilice --prefix=svn/. Crea nombres de ramas más agradables.

Además, no descuide los --trunk, --tags y --branches argumentos cuando se hace clone o init.

La obtención es uno de los pasos más largos, así que configure un trabajo cron para hacer git svn fetch en segundo plano. Esto es seguro porque la recuperación no afecta a ninguna de sus ramas de trabajo.

(información básica sobre git svn fetch:. Este comando se ejecuta en primer lugar cada vez que haces git svn rebase, por lo que al hacer este paso antes de tiempo, su llamada git svn rebase por lo general será más rápido Los fetch comando descarga SVN compromete y las pega en ramas especiales administrados por git-svn. Estas ramas son visibles haciendo git branch -r, y si usted hizo el paso anterior, comienzan con "svn /".)

Asegúrese de que sabe cómo usar git reflog. He tenido algunas ocasiones en las que git svn dcommit murió (generalmente porque traté de registrar algo enorme) y mi compromiso pareció haberse perdido. En todos los casos, la confirmación se encontró fácilmente en el reflog.

+0

¿Puede explicarme algo más sobre el truco de búsqueda? ¿Qué hace eso? ¿Lo ejecuta una y otra vez en el fondo? Habiendo hecho eso, ¿cómo se obtienen los cambios en su sucursal? –

+0

Ok, agregué información extra sobre fetch – andy

4

Aquí hay algo que recientemente he aprendido:

  1. siempre lo hacen git svn rebase antes de hacer git svn dcommit
  2. cuando usted está haciendo dcommit, hacerlo desde una rama estacionamiento temporal - si usted (o GIT) desordenar, es mucho más fácil de recuperar con sólo la eliminación de la rama y empezar de nuevo

Cuando svn dcommit muere a mitad de camino a través de un gran comprometerse y parece haber perdido toda su historia, do this:

cómo recuperar:

En primer lugar, .git abierta/logs/HEAD

Encuentra el hash del cometen ese es el cabecera de su repositorio git. Esperamos que pueda recuerda el mensaje de confirmación y puede entenderlo, pero debe ser bastante obvio

De vuelta en su ahora f-ed trabajando-dir:

git reset --hard < hash a partir del registro >

Esto consigue su directorio de trabajo de nuevo a donde estaba antes de que hizo un git- sVN dcommit. Entonces:

rebase git-svn git-svn dcommit

+0

Estoy de acuerdo con el # 1, pero nunca he encontrado que haya necesitado hacer el # 2. 'dcommit' no se rompe con frecuencia, y cuando lo hace, no es difícil recuperarlo. – andy

+0

hoy decidió que Perl podría volcar núcleo a la mitad - me dejó con mi copia de trabajo que falta muchos cambios –

1

Si usted tiene un gancho post-commit en el repositorio SVN que pueden rechazar las confirmaciones, entonces git svn dcommit dejará de procesar compromete la primera vez que se rechaza una confirmación, y usted tiene que recuperar sus confirmaciones restantes de la reflog git .

En realidad, creo que el problema anterior fue causado por mi cow-orker que no ejecuta git rebase -i correctamente al intentar corregir las confirmaciones rechazadas. Pero, gracias al reflog, ¡pudimos recuperar todo!

0

He estado blogueando un poco sobre cómo vivir con Subversion y Git en paralelo, y también he puesto un par de screencasts rudimentarios. Reunidos todo aquí: http://www.tfnico.com/presentations/git-and-subversion

Voy a tratar un resumen:

  • ir a por ella! No duele probarlo :)
  • Comience con un pequeño proyecto de Git para aprender primero.
  • Manténgase en la línea de comandos hasta que la domine. Las herramientas GUI pueden confundirte.
  • Si es posible, realice migraciones únicas, deje el SVN atrás, un proyecto a la vez, empezando por los pequeños.
  • Si tienes que vivir con un Git y SVN juntos, ten en cuenta que debes renunciar a muchas ventajas que obtienes de Git, como sucursales, pero obtienes los beneficios "locales" (escondite, índice, velocidad).
  • Si usted es un usuario de Git, simplemente haga el git-svn rebasing y commodifique usted mismo.
  • Si tiene varios colaboradores de Git, configure un Git/SVN central que solo saque de SVN, mientras que cada usuario de Git se compromete directamente con SVN. More info here.
Cuestiones relacionadas