Git svn clone: ​​Cómo diferir la recuperación del historial de revisiones

A menudo tengo el caso de que quiero trabajar en un repository SVN de inmediato. Pero un git svn clone [url] también clona todo el historial. Así que quiero acelerar las cosas. La primera parte es search solo la última revisión en su repository de Git. Lo hago así:

 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: "Cómo clonar-svn clonar las últimas n revisiones de svn"

De esta manera estoy en funcionamiento y puedo trabajar de inmediato. Pero sin copy local de la historia.

La pregunta es, ¿cómo recuperaré el historial del repository svn?

Y preferiblemente, ¿puede hacerse esto en fragments de, digamos, 1000 revisiones (en order inverso)? Cualquier ayuda aquí sería muy apreciada 🙂

Descubrí cómo se puede hacer. El truco es no usar git svn clone . En su lugar, use git svn init y git svn fetch individual. 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 

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 nuevas revisiones en el tree completo (el SHA1 de un SVN) la revisión en git depende del parentesco completo de la revisión). Si eres útil con los escalpelos que git te ofrece, ve a por ello.

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

  • Haga una copy inicial de las últimas revisiones, para que pueda trabajar inmediatamente;
  • Inicie otro clon del historial completo en otro directory / repository de git;
  • Trabaja en tu historial parcial todo lo que quieras;
  • Cuando se completa el clon completo, utilice un enfoque como http://www.sanityinc.com/articles/relocating-git-svn-repositories/ para copyr su trabajo del repository parcial al completo.

Entonces, esa es una respuesta parcial: ¿cómo puedes recuperar la historia después? Acceda a otro repository y copie lo que necesita. ¿Se puede hacer en trozos de 1000 en order inverso? Con los escalpelos, y mucha paciencia, podría , pero es poco probable que valga la pena. El scope completo en ejecución va a superar la sobrecarga de todas las primeras revisiones tomadas por cada bloque que git svn fetch , y la corrección se volverá tediosa.

git svn fetch parece " recordar " las revisiones que se han visto anteriormente. He estado teniendo éxito al hacer ranges:

 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 

Busqué las revisiones más recientes y luego comencé a " completar " las brechas. Parece que funciona bien.

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