2009-10-12 13 views
31

A menudo tengo el caso de que quiero trabajar en un repositorio SVN de inmediato. Pero un ordinario git svn clone [url] también clona todo el historial. Así que quiero acelerar las cosas. La primera parte es buscar solo la última revisión en tu repositorio de Git. Lo hago así:Git svn clone: ​​Cómo diferir la recuperación del historial de revisión

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

git svn clone -r$REV:HEAD $URL $PROJECT_FOLDER 

(más información en el artículo de stackoverflow:.. "How to git-svn clone last n revisions from svn"

De esta manera estoy en funcionamiento y puede trabajar de inmediato, sin embargo, una copia local de la historia

la pregunta es, ¿cómo me posteriormente historial de obtención del repositorio sVN?

y preferentemente, se puede hacer esto en trozos de, digamos 1000 revisiones (en orden inverso). Cualquier ayuda aquí sería muy apreciada :)

+0

He encontrado la siguiente solución útil http://stackoverflow.com/a/2348596/429476 –

Respuesta

21

Descubrí cómo se puede hacer. El truco es para no usar git svn clone. En su lugar, use git svn init y git svn fetch individualmente. Modificado el ejemplo:

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

mkdir $PROJECT_FOLDER 
cd !$ #goes into dir named $PROJECT_FOLDER 
git svn init -s $URL #-s implies --stdlayout with /trunk /tags /branches 
git svn fetch -r $REV 

# hack, hack, hack 

# or update history (fetch 50 revisions back each loop 
for ((r=$REV; r>0; r-=50)); 
do 
    git svn fetch -r $r:HEAD 
done 
+3

esto no parece funcionar para mí, simplemente vuelve cuando trato de hacer git svn fetch -r 1000: HEAD – Verhogen

+0

Tampoco es para mí, así como la solución propuesta por Rob Crawford a continuación. Para mí, la pregunta inicial sigue sin respuesta. – sthiers

+2

@verhogen - 'git svn fetch -r 1000: HEAD' significa" recuperar todas las revisiones comenzando desde 1000 rev hasta el HEAD actual ". Si tiene, digamos, 800 revisiones en su SVN, esto no obtendrá nada. Si tuviera 50k revisiones, obtendría mucho más de lo que esperaba. –

0

git svn fetch parece " recordar" las revisiones se ha visto anteriormente. He tenido éxito con rangos haciendo:

git svn fetch -r 0:100 
git svn fetch -r 100:200 
git svn fetch -r 4500 
git svn rebase 
git svn fetch -r 200:300 

Fui a buscar las revisiones más recientes y luego comenzó "llenado en" los huecos. Parece que funciona bien.

Jesper: si su repositorio no tiene una revisión 1000, entonces no hay nada que recuperar. ¡Asegúrate de que los números de revisión que estás usando sean válidos!

+1

no estoy seguro de lo que esto logra. tiene éxito, pero un registro de git no le mostrará nada más que su búsqueda inicial y reenvío. –

5

Ninguna de las respuestas sugeridas funcionará. git svn fetch con una revisión solo recuperará revisiones más nuevas que las ya clonadas. Puede usar git svn reset para volver a una revisión anterior y recuperar desde allí, pero luego tendrá que hacer un trabajo sucio para 'injertar' sus revisiones más recientes en el árbol completo (el SHA1 de una revisión SVN en git depende de toda la paternidad de la revisión). Si usted es útil con los escalpelos git le ofrece, vaya para ello.

Es mucho más fácil simplemente evitar el problema.

  • Haga una copia inicial de las últimas revisiones, para que pueda ponerse a trabajar inmediatamente;
  • Inicia otro clon del historial completo en otro directorio/repositorio de git;
  • Trabaja en tu historial parcial todo lo que quieras;
  • Cuando se completa la clonación completa, utilice un método como http://www.sanityinc.com/articles/relocating-git-svn-repositories/ para copiar su trabajo del repositorio parcial al completo.

Entonces, esa es una respuesta parcial: ¿cómo puede recuperar el historial? Acceda a otro repositorio y copie lo que necesita. ¿Se puede hacer en trozos de 1000 en orden inverso? Con los escalpelos, y mucha paciencia, podría, pero es poco probable que valga la pena.La recuperación completa que se ejecuta hacia adelante va a superar la sobrecarga de todas las primeras revisiones tomadas por cada bloque que git svn fetch, y la reparación se volverá tediosa.

Cuestiones relacionadas